我现在的应用是接收到指定客户机的数据,然后转发给其他客户机.我现在的做法是,把待发送的数据分发到各个客户机的发送缓冲中,也就是独自发送缓存,然后有一个发送线程,WSASend数据.现在的问题是,如果客户机一多,假设是1000台,那么一个循环下来发送的数据间隔似乎大了.如果发送的是视频,那么就会觉得卡,断断续续的. 大家有没有什么解决办法?

解决方案 »

  1.   

    如果是用了IOCP进行投递的话,1000个的循环投递应该是不成问题的,因为不是阻塞的
      

  2.   

     IOCP,可以同时 递交无数的WSASend,由windows来帮你队列化。
    自己可以不用建队列,但是WSASend异步会吃掉内存,因为你发送的数据实际被排队了,如果太对了,恐导致 WSASend异步失败,或者windows IOCP挂掉。
      

  3.   

    因为我要做的视频转发,假设每秒的数据量是70K,我要把这70K数据转发到所有客户端上,如果只有一个线程负责投递的话,如果有几百用户或上千用户,而且发送时我还要把70K拆包成4K发送,那么一个循环下来,客户接收到的数据都是延时的.我现在的作法是多开几个投递线程,假设10个,每一个负责一个区间,我这里设置100,每个线程负责100客户端的发送,这样应该能减少时间上开销吧?而且我发送的数据包,用接口(IInterface)来封装,然后提交给每个客户端的发送缓存,这样可以的话当数据没人调用时,这个接口就自动销毁了,不用每个客户端都建立一个副本,只需要指令就行了.
    不知道上面的做法有什么不妥吗?
      

  4.   

    用IOCP就是多个线程同时工作的,你怎么才一个线程了