none
用CAsyncSocket作服务端的疑惑 RRS feed

  • 问题

  • 我的服务端网络连接用的是 MFC 的 CAsyncSocket 类,
    服务端每隔1秒向客户端发送一个用于测试的4字节数据包。

    客户端每隔1秒向服务端发送一个4字节的心跳包,
    服务端在收到这个包后马上向客户端回发一个4字节的应答包,
    客户端在收到应答包后,计算发送心跳包到收到回应包之间所用的时间作为PING值显示。

    我遇到了如下的这个问题:

    按上面的程序环境,我在本机开服务器和客户端,客户端显示的PING值恒定为16。(因为客户端16毫秒收一次包)
    但如果服务端和客户端开在两台不同的电脑上,每秒就会有一次PING值在218左右,其他都是16。

    如果我把服务端每隔1秒向客户端主动发包的逻辑去掉,
    那么客户端显示出的PING值就又恒定为16了。

    我把服务端改成每秒向客户端主动发60个4字节的包,
    显示的PING值是218~250的范围。

    我对问题分析后总结如下:

    只要在1秒内服务端向客户端只发送一个包,我的PING值就恒定为16。
    只要在1秒内服务端向客户端发送的包超过一个,我的PING值就会变大。
    这种现像在本地开服务端和客户端时是不会发生的。

    我想求教的内容是:

    这种情况是 CAsyncSocket 本身的问题吗?
    还是说网络程序都有这种问题?
    我的程序是大型网游,在局域网环境中要求客户端向服务端发包后在50毫秒内得到回应。
    我有什么办法可以处理掉当前连发两个以上的包就会出现延迟的问题吗?

    注:我说的两个以上的包指的是调用一次send函数算一次。

    2015年5月9日 4:27

答案

  • 我建议你用一些工具比如Fiddler去看看网络连接流程里每个点的时间点,从而找到导致延迟问题的地方。

    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    • 已标记为答案 lihuipeng49 2015年5月14日 12:01
    2015年5月11日 6:43
  • 我们尝试用工具抓了几个大型网络游戏的包,发现他们的网络延迟也在200左右,这应该是网络本身的问题。
    • 已标记为答案 lihuipeng49 2015年5月14日 12:04
    2015年5月14日 12:03

全部回复

  • 我建议你用一些工具比如Fiddler去看看网络连接流程里每个点的时间点,从而找到导致延迟问题的地方。

    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    • 已标记为答案 lihuipeng49 2015年5月14日 12:01
    2015年5月11日 6:43
  • 您的意思是send调用多次,发送多个包,ping的值会变大?
    看一下是否是SO_SNDBUF的问题。将SO_SNDBUF设置为0试试。

    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.

    2015年5月11日 10:42
    版主
  • 我们尝试用工具抓了几个大型网络游戏的包,发现他们的网络延迟也在200左右,这应该是网络本身的问题。
    • 已标记为答案 lihuipeng49 2015年5月14日 12:04
    2015年5月14日 12:03