求教服务端定时给所有客户端发信出现冲突的解决办法

homejiji 2008-10-30 10:01:01
服务端与客户端之间采用tcp/ip进行通讯,最大连接客户端100台;
服务端要给客户端定时发送更新信息,因为信息的种类不同所以需要分成2种情况进行发送;
情况a:每1分钟检查一次如果有更新就给所有客户端发送信息
情况b:每2分钟检查一次如果有更新就给所有客户端发送信息
所以我开了2条线程来分别处理这两种情况。
现在问题是因为连接的客户端有100台,而且更新信息有可能比较大要分包发送,给每个客户端发送一次完整信息都要一段时间,如果这时候a和b都要给客户端发送信息就会产生冲突,更有可能这时候客户端还向服务端发送了请求要求服务端返回需要的信息。这样就在同一段时间内要给同一客户端发送三种不同的信息(都是在同一socket,和同一端口下)。。。请问怎么处理这种情况才能保证所有信息都准确地发送给客户端?(难道需要多开几个连接么?)

另外因为我是把所有客户端的socket都存放在list列表里,全体发送信息的时候需要遍历一遍list,这样发送的时候会有先后顺序。而且必须等前一个发送完了才能发送下一个,有没有办法同时分别给每个客户端发送信息呢?这样可以不用等待节省时间。。希望高手能帮帮忙,给点思路,给些建议,当然最好能给些例子或者资料!

...全文
157 点赞 收藏 36
写回复
36 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
homejiji 2008-11-06
再来找找答案
回复
tianjinldl 2008-11-06
像我现在做的是数据不管正确与否都要发送过去,所以在信息记录中就有个标志,0代表正确1代表错误,你也可以把信息里设置一个字段存放代表3种情况的编号,接收后再解析
回复
tianjinldl 2008-11-06
貌似10个线程以上用线程池效率高些
回复
tianjinldl 2008-11-06
我现在在做的也是信息发送,我在每次连接成功后,都会首先发送一个信息头,然后才回去发信息,你可以针对每个客户端开3个线程,发送3种不同信息,客户端根据头信息来区分传过来的东西,然后存在对应的消息队列,这样好像有些麻烦,目前我是这样弄的,没想到更好的办法,谁有好的方法说下。
回复
wangping_li 2008-11-05
多开几个线程吧,然后线程内排队,先来先执行
回复
xinyun80 2008-11-05
最佳方案是:客户端定时向服务器发送请求
如果此方案不行的话,那只有运用多线程去实现了,这样就不会有并发冲突了,前提是客户端数量大,服务器也得有好的配置才行.
回复
hangang7403 2008-11-05
帮顶
回复
homejiji 2008-11-05
怎么没人回答阿,大家帮顶一下阿
回复
homejiji 2008-11-04
顶起来!防止并发冲突阿!!
回复
homejiji 2008-10-31
大家请多多帮助阿!!!
回复
xxyping 2008-10-31
[Quote=引用 5 楼 justindreams 的回复:]
第一个:服务器端接收到的消息,存入集合或者数组,做标记,然后根据标记来向不同的客户端发送消息
第二个:多线程吧,并且使用端口复用
[/Quote]
MARK
回复
guest78978 2008-10-31
mark
回复
homejiji 2008-10-31
[Quote=引用 23 楼 gongsun 的回复:]
多线程,设定标记。
[/Quote]

能说的再详细点么??
回复
gongsun 2008-10-31
多线程,设定标记。
回复
abcyzq 2008-10-31
不懂,帮楼主顶!
回复
homejiji 2008-10-31
加分顶起来!!!
回复
lishanshan1336 2008-10-30
回复
homejiji 2008-10-30
[Quote=引用 16 楼 starts_2000 的回复:]
分包发,最给加个消息头,判断是一样的头才是一个相同数据,这样不管先收到哪个数据,都不会乱的
[/Quote]
恩,谢谢,这样的做的话分包组合会比较麻烦,希望还能有别的方法。
另外第二个问题也请帮忙回答下
我明天再给帖子加分,希望大家多给些指点!
回复
starts_2000 2008-10-30
分包发,最给加个消息头,判断是一样的头才是一个相同数据,这样不管先收到哪个数据,都不会乱的
回复
homejiji 2008-10-30
谢谢killer_liqiao 帮顶

我自己也顶一下。。
回复
加载更多回复
相关推荐
发帖
C#
创建于2007-09-28

10.6w+

社区成员

.NET技术 C#
申请成为版主
帖子事件
创建了帖子
2008-10-30 10:01
社区公告

让您成为最强悍的C#开发者