请教Server收包出现异常的原因

发布于 2022-07-17 09:55:45 字数 387 浏览 7 评论 6

现象:
客户端A向服务端B发送固定格式的请求“Cmd=0001&ID=1234567890”(其中ID是可变的),B处理后给A返回处理结果。
现在发现,B运行一段时间(一般是1天以上)后,A发送到B的请求大部分都出现了超时错误.查看B的日志,在错误期间,B有收到超过10K的包,而且该包是由多个请求构成的,比如“Cmd=0001&ID=1234567890Cmd=0001&ID=1234567890Cmd=0001&ID=1234567890Cmd=0001&ID=1234567890(这里省略)”
说明:A到B之间是长链接,A是多进程,B是多线程处理。
问题:请问出现这种情况一般是什么问题导致的呢?跟了这个问题多天了,没有一点头绪了。

请大家多多帮忙。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

dawn曙光 2022-07-24 18:35:17

“显式的 push 操作”是指什么?send?

勿忘初心 2022-07-24 17:34:05

一问一答的协议必须要加显式的 push 操作。
例如 SMTP 就是这样的。

坏尐絯 2022-07-24 09:01:08

这个问题其实很简单,先处理好包的边界,再检查多进程和多线程是不是有问题,再检查其他网络程序是否也有类似的问题(排除硬件、驱动等其他方面的问题),然后就没问题了。
楼主显然是个新手,网络和多线程可能都不够熟练,以后慢慢就会好了,没有代码没法找原因。

长途伴 2022-07-23 17:37:04

原帖由 liubinbj 于 2006-7-3 12:01 发表
没有明确的应用层协议定义,你是怎么区分包头的呢?是靠Cmd中的字母“C”来判断包的开头吗?包结束又是怎么判断的?
假设收到这么个包
“Cmd=0001&ID=12”
你会认为这个包已经完整结束了吗?如果是,再收到 ...

目前确实没有很好的处理这个。但A跟B之间理论上是一问一答的,按理说不应该出现超过10K的请求包啊。
你说的这个是不是怀疑重复收包了呢?

夏尔 2022-07-23 09:10:17

没有明确的应用层协议定义,你是怎么区分包头的呢?是靠Cmd中的字母“C”来判断包的开头吗?包结束又是怎么判断的?
假设收到这么个包
“Cmd=0001&ID=12”
你会认为这个包已经完整结束了吗?如果是,再收到了一个“3456789”你又打算把这个包怎么处理?

赴月观长安 2022-07-21 19:58:16

半天后,如果 服务器正常-->
        服务器的cpu使用率是多少?
        最大网络流量占带宽的多少?
        平均网络流量占带宽的多少?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文