请教下UDP通信?

xiaoguailong3 2011-11-25 11:05:20
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个端口么?
...全文
150 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
dfasri 2011-11-28
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 xiaoguailong3 的回复:]

A和B在一机器上测试的话,有带宽的原因么?
[/Quote]

一台机器上也会丢包的, 只要开的线程多, 而且发送总是连续发送的, 就会丢包. 我现在也在写, 同一台机全速跑同样会丢包.
同一台机的话, 劝你是直接用TCP传送会较方便也很快, 不会比UDP慢
wyx100 2011-11-28
  • 打赏
  • 举报
回复
网络带宽本身够吗?一秒8000包,差不多10M带宽了。

按照128字节/包计算,至少需要8M带宽带宽保证,才保证不丢包。

现在的公网环境,真正的10M带宽保证,价格很高的哦。

这样的应用用UDP不合适的,必须用TCP。TCP可以有重传机制,而UDP没得。
UDX协议 2011-11-28
  • 打赏
  • 举报
回复
可以试试UDX协议
xiaoguailong3 2011-11-28
  • 打赏
  • 举报
回复
A和B在一机器上测试的话,有带宽的原因么?
UDX协议 2011-11-28
  • 打赏
  • 举报
回复
如果是本机,一秒应该在20MB~60MB之间,一般的开发机器。
xiaoguailong3 2011-11-28
  • 打赏
  • 举报
回复
带宽是够的,UDP写了有确认机制的,这领导要求啥就啥吧。。我现在在自己机器上测了下,发现1秒发送和接收的数据量很少,这个在一机器上测试也跟网络带宽有关系么

[Quote=引用 13 楼 wyx100 的回复:]
网络带宽本身够吗?一秒8000包,差不多10M带宽了。

按照128字节/包计算,至少需要8M带宽带宽保证,才保证不丢包。

现在的公网环境,真正的10M带宽保证,价格很高的哦。

这样的应用用UDP不合适的,必须用TCP。TCP可以有重传机制,而UDP没得。
[/Quote]
xiaoguailong3 2011-11-28
  • 打赏
  • 举报
回复
呵呵,我知道会丢包,我测的是接收速度和发送速度,就是1秒发送多少,接收多少
[Quote=引用 14 楼 dfasri 的回复:]
引用 11 楼 xiaoguailong3 的回复:

A和B在一机器上测试的话,有带宽的原因么?


一台机器上也会丢包的, 只要开的线程多, 而且发送总是连续发送的, 就会丢包. 我现在也在写, 同一台机全速跑同样会丢包.
同一台机的话, 劝你是直接用TCP传送会较方便也很快, 不会比UDP慢
[/Quote]
dfasri 2011-11-26
  • 打赏
  • 举报
回复
两台服务器一对一传送, 假如有100Mb的连接速度, 那么换转就就是12MB左右, 单纯用一个计算器, 然后用GetTickCount两值相差, 计算当前发送机器的最小计时单位, 然后12MB/1000ms * 计时单位, 就是等待在一个计时单位内, 能够连接发送的最大数据量, 只要还没有达到这个数据量的, 尽管发送, 达到或超过这个数据量的, 就Sleep(1) 一下, 这样的话, 都是公网并且一对一传送, 丢包率基本为0, 然后再简单弄一个重传的算法就是了.
xiaoguailong3 2011-11-26
  • 打赏
  • 举报
回复
A和B在一机器上呢?
[Quote=引用 9 楼 dfasri 的回复:]
两台服务器一对一传送, 假如有100Mb的连接速度, 那么换转就就是12MB左右, 单纯用一个计算器, 然后用GetTickCount两值相差, 计算当前发送机器的最小计时单位, 然后12MB/1000ms * 计时单位, 就是等待在一个计时单位内, 能够连接发送的最大数据量, 只要还没有达到这个数据量的, 尽管发送, 达到或超过这个数据量的, 就Sleep(1) 一下, 这样的话, 都是公网并且……
[/Quote]
squiffy 2011-11-26
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 xiaoguailong3 的回复:]

在同一机器上测试的话跟网络带宽有没关系?

引用 6 楼 squiffy 的回复:
网络带宽本身够吗?一秒8000包,差不多10M带宽了。

按照128字节/包计算,至少需要8M带宽带宽保证,才保证不丢包。

现在的公网环境,真正的10M带宽保证,价格很高的哦。

这样的应用用UDP不合适的,必须用TCP。TCP可以有重传机制,而UDP没得。
[/Quote]

你指的A和B用同一台在公网?

如果是这样,当然和带宽也有关系了。A也是通过公关网络收报啊。A和B直接的通信没有带宽问题。
xiaoguailong3 2011-11-25
  • 打赏
  • 举报
回复
可靠机制是没问题,但是好像不是发送太快丢包的问题,我看下UDT能不能满足我的要求吧
[Quote=引用 3 楼 brightlee 的回复:]
IOCP个毛,这东西明显是发送太快,UDP数据要丢包的。
1对1发送的时候怎么能短时间发送出大量的消息 ,你可以查看下UDT的实现(用例子,应该可以把你的带宽跑满),即发送时要有确认。可靠传。
当然如果这个已经解决,处理消息过慢的话;应该当把接受消息本身弄到一个队列中;然后由处理线程读取处理,后删除对列。即 消息接受线程 为生产者,消息处理线程为消费者,当有些消息处理比较慢时,可以为它专门开相……
[/Quote]
brightLee 2011-11-25
  • 打赏
  • 举报
回复
IOCP个毛,这东西明显是发送太快,UDP数据要丢包的。
1对1发送的时候怎么能短时间发送出大量的消息 ,你可以查看下UDT的实现(用例子,应该可以把你的带宽跑满),即发送时要有确认。可靠传。
当然如果这个已经解决,处理消息过慢的话;应该当把接受消息本身弄到一个队列中;然后由处理线程读取处理,后删除对列。即 消息接受线程 为生产者,消息处理线程为消费者,当有些消息处理比较慢时,可以为它专门开相应的线程处理。这样可以加快处理的速度
xiaoguailong3 2011-11-25
  • 打赏
  • 举报
回复
现在就是IOCP,看好是服务器对服务器的
[Quote=引用 1 楼 kiven2010 的回复:]
iocp
[/Quote]
  • 打赏
  • 举报
回复
iocp
xiaoguailong3 2011-11-25
  • 打赏
  • 举报
回复
在同一机器上测试的话跟网络带宽有没关系?

[Quote=引用 6 楼 squiffy 的回复:]
网络带宽本身够吗?一秒8000包,差不多10M带宽了。

按照128字节/包计算,至少需要8M带宽带宽保证,才保证不丢包。

现在的公网环境,真正的10M带宽保证,价格很高的哦。

这样的应用用UDP不合适的,必须用TCP。TCP可以有重传机制,而UDP没得。
[/Quote]
squiffy 2011-11-25
  • 打赏
  • 举报
回复
网络带宽本身够吗?一秒8000包,差不多10M带宽了。

按照128字节/包计算,至少需要8M带宽带宽保证,才保证不丢包。

现在的公网环境,真正的10M带宽保证,价格很高的哦。

这样的应用用UDP不合适的,必须用TCP。TCP可以有重传机制,而UDP没得。
xiaoguailong3 2011-11-25
  • 打赏
  • 举报
回复
求各位大牛现身指点

18,355

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧