项目的交易相关功能模块近期新增了push相关的功能,但在调试时发现push的开发测试服务器功能正常,但是push的线上测试服务器功能不正常,而且是概率性的问题,根据客户端的log显示,客户端与服务器的socket链接是建立成功的,但是之后socket读取数据时返回EOF的错误,客户端和服务器的开发人员都在相互说是对方的程序的问题,客户端说服务器哪里出错了,链接建立成功后立马断开了,服务器开发说服务器端代码都很久没改动了,是客户端发了不正常的数据导致的,或者是客户端主动断开连接的。
客户端开发最终通过Wireshark抓包分析,发现TCP三次握手正常,成功建立连接后,服务器立马发了一条数据,然后客户端socket就读取到了EOF的错误,说明是服务器主动断开的,因为这时候客户端根本还没有发任何数据,把Wireshark的抓包数据给主站看,对着分析了一遍,主站说可能是服务器的问题,就去排查了。最终发现的确是服务器的代码的问题,具体原因是前段时间服务器新增了功能,更新了代码,代码同步过程中导致代码覆盖之类的问题,但是其他的线上测试push服务器都是正常的,就是那一台服务器出了问题。
wireshark抓包分析在日常开发中还是非常好用的。
参考: