解决方案 »

  1.   

    只能一个个广播,用一个链表保存所有的客户端连接的socket,然后遍历发送数据
      

  2.   

    @oyljerry 
    如果这样的话..也相当于一个个的发送socket了吧?就直接对着每一个客户端发送不是就可以了吗?这样广播还有什么意义呢?
    主要是我这边想到如果客户端比较多(假如几千几万),一个个的发送socket是不是效率就很不好了呢?
      

  3.   

    客户端在服务器的链表里,只能去遍历链表拿到客户端socket如果数据少,一个一个发也没啥效率问题如果数据量大,你可以变量客户端链表,拿到socket(开线程或线程池)将数据和socket弄到线程去send,这样就不影响发下一个用户了
      

  4.   

    @xihu1364 
    这样应该可以解决一些资源,但是不知道还有没有别的方式。比如..虽然这样多线程,或者同时用多个端口发送..但是所有的网络数据应该都会收到网宽的限制吧?
    有没有这种方式,可以将要发送的数据(只发送一次)以及接受数据的用户信息(也就是所有用户链表)发送出去(有点类似于广播,只是这方式广播的范围只在发送的用户列表中的用户)?
      

  5.   

    另外想请教一哈socket的广域网接受发送数据的问题..
      

  6.   

    如果用户在一个局域网内向服务器发送数据而服务器得到的只是客户端的网管的IP地址,这种情况在网上查看资料说可以用Nat分发的方式解决..但是如果服务端有数据要更新,而要把更新数据发送到客户端岂不是服务器都要保护所有的Nat分发的连接才可以?
    这样岂不是服务端压力很大?
      

  7.   

    你可以把功能解耦出来,比如用一个网关.exe专门维护客户端的链接,service.exe专门处理逻辑这样你还觉得压力大么
      

  8.   

    @xihu1364 
    数据量差不多每秒100k左右(基本是屏幕截图后的数据,后期采用其他的技术可能在20K左右),这样加入1000的用户连进来,也就差不多100M了,也就很大了
      

  9.   

    @xihu1364 
    你好,我目前找到了一种可以节约带宽的方法,就是用P2P将服务器的带宽转入到客户端上面。先谢谢你的回复哈。
    我现在在考虑服务器先将图片数据分发给下面的几个客户,这几个客户端在继续讲下载的数据上传给其他的客户端。
    但是这种方式需要服务器管理所有节点,不知道这些节点之间可以用什么方式进行管理呢?