首页 新闻 会员 周边 捐助

socket服务器端群发消息给所有客户端时只能遍历一下所有客户端然后一个一个发吗,上万的用户的话太慢了

0
[已解决问题] 解决于 2011-03-07 16:40

socket服务器端群发消息给所有客户端时只能遍历一下所有客户端然后一个一个发吗,上万的用户的话太慢了

拖鞋王子的主页 拖鞋王子 | 初学一级 | 园豆:38
提问于:2010-11-01 21:58
< >
分享
最佳答案
0

事件广播

LoujaDy | 小虾三级 |园豆:908 | 2010-11-02 12:32
能否具体讲讲
拖鞋王子 | 园豆:38 (初学一级) | 2010-11-02 13:19
当服务器接收到一个socket Socket sc = tcp.AcceptSocket(); //ServerSocket 为一个自定义的类,里面借设有一个发送方法 SendMsg(byte[] date) ServerSocket ssc = new ServerSocket(sc);//注意,这里紧紧是做一下包装 //服务端有一个用来广播事件 broadcastEvent+=new BroadcastEvent(ssc.SendMsg);//接收的参数为 当调用广播时 if(broadcastEvent!=null) { broadcastEvent(data); } //简单描术 SendMsg(byte[] data) { sc.Send(data);//注意,这个sc便是客户端的通讯对象哦 }
LoujaDy | 园豆:908 (小虾三级) | 2010-11-02 15:14
当服务器接收到一个socket Socket sc = tcp.AcceptSocket(); //ServerSocket 为一个自定义的类,里面借设有一个发送方法 SendMsg(byte[] date) ServerSocket ssc = new ServerSocket(sc);//注意,这里紧紧是做一下包装 //服务端有一个用来广播事件 broadcastEvent+=new BroadcastEvent(ssc.SendMsg); //接收的参数为 当调用广播时 if(broadcastEvent!=null) { broadcastEvent(data); } //简单描术 SendMsg(byte[] data) { sc.Send(data);//注意,这个sc便是客户端的通讯对象哦 }
LoujaDy | 园豆:908 (小虾三级) | 2010-11-02 15:16
汗,排不了版,回车了没用。就是利用了事件的机制!没啥复杂的!
LoujaDy | 园豆:908 (小虾三级) | 2010-11-02 15:17
其他回答(3)
0

你用的是TCP传的,用UDP广播就不用一个个传了。

大狼熙熙 | 园豆:129 (初学一级) | 2010-11-01 22:22
是TCP的
支持(0) 反对(0) 拖鞋王子 | 园豆:38 (初学一级) | 2010-11-01 22:24
0

这种情况请使用异步处理!

BloodyAngel | 园豆:230 (菜鸟二级) | 2010-11-01 22:57
是异步的
支持(0) 反对(0) 拖鞋王子 | 园豆:38 (初学一级) | 2010-11-02 10:37
0

客户端Request的时候再发。客户端用udp Request Server,server然后再响应。如果server保存所有的客户端信息,服务器会很容易挂掉。

沉默的糕点 | 园豆:1786 (小虾三级) | 2010-11-02 09:47
我现在是在server保存所有的客户端信息,是会偶尔挂掉。要用udp吗
支持(0) 反对(0) 拖鞋王子 | 园豆:38 (初学一级) | 2010-11-02 10:41
用UDP应该会减少一点服务器的压力,但是并不能保证信息一定送达。loujaDy说要广播,但是事件广播真的可以吗?而且怎样广播呢?我觉得还是client 用udp 定期发送一个或几个byte到服务器,然后服务器再送信息,然后标记这个信息已经发送给这个client了。client一多,我觉得应该使用Client request server的方式处理。不过期望loujaDy的广播,如果可以实现,应该是最好的方式。
支持(0) 反对(0) 沉默的糕点 | 园豆:1786 (小虾三级) | 2010-11-02 13:35
@拖鞋王子:估计你对客户端信息集合操作的时候没有考虑线程同步的问题。
支持(0) 反对(0) 大狼熙熙 | 园豆:129 (初学一级) | 2010-11-02 17:53
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册