请教下UDP通信?
UDP服务器在公网A上有台服务A:192.168.1.101 8080,在公网B上有台服务B:192.168.1.102 8081
请教下服务器A和B应该要用怎么样的机制通信才能短时间内处理大量的数据,如100个客户端直接根服务器A通信,1秒钟A能接收处理8000条信息,同时,A需要把8000条中的6000条转发给服务器B,那么A要以怎么样的机制发给服务器B呢?
个人方案:直接发送,测试存在的问题:A发给B6000条信息,B接收完6000条信息的时间大概为60秒,平均1秒能接收到100个
求解决方案。。。1对1发送的时候怎么能短时间发送出大量的消息,需要在A上开创建100个socket,开100个端口么?
[解决办法]
IOCP个毛,这东西明显是发送太快,UDP数据要丢包的。
1对1发送的时候怎么能短时间发送出大量的消息 ,你可以查看下UDT的实现(用例子,应该可以把你的带宽跑满),即发送时要有确认。可靠传。
当然如果这个已经解决,处理消息过慢的话;应该当把接受消息本身弄到一个队列中;然后由处理线程读取处理,后删除对列。即 消息接受线程 为生产者,消息处理线程为消费者,当有些消息处理比较慢时,可以为它专门开相应的线程处理。这样可以加快处理的速度
[解决办法]
网络带宽本身够吗?一秒8000包,差不多10M带宽了。
按照128字节/包计算,至少需要8M带宽带宽保证,才保证不丢包。
现在的公网环境,真正的10M带宽保证,价格很高的哦。
这样的应用用UDP不合适的,必须用TCP。TCP可以有重传机制,而UDP没得。
[解决办法]
两台服务器一对一传送, 假如有100Mb的连接速度, 那么换转就就是12MB左右, 单纯用一个计算器, 然后用GetTickCount两值相差, 计算当前发送机器的最小计时单位, 然后12MB/1000ms * 计时单位, 就是等待在一个计时单位内, 能够连接发送的最大数据量, 只要还没有达到这个数据量的, 尽管发送, 达到或超过这个数据量的, 就Sleep(1) 一下, 这样的话, 都是公网并且一对一传送, 丢包率基本为0, 然后再简单弄一个重传的算法就是了.
[解决办法]
网络带宽本身够吗?一秒8000包,差不多10M带宽了。
按照128字节/包计算,至少需要8M带宽带宽保证,才保证不丢包。
现在的公网环境,真正的10M带宽保证,价格很高的哦。
这样的应用用UDP不合适的,必须用TCP。TCP可以有重传机制,而UDP没得。
[解决办法]