1. 问题发现
服务器经常发现Broken pipe异常
但是对项目运行又没有什么影响,一直没有关注。
后来在使用websocket的时候重现了该异常,找到问题点,然后开始排查。
2. 问题解决
1. 百度
出现“Broken pipe ”可能的情况:
1、客户端请求服务器数据,服务器突然挂了;
2、客户端请求服务端数据,服务端正常返回,凡是客户端由于超时等原因断开。
2. 分析
服务器正常运行,基本可以确定是因为超时
查看异常日志前面的操作,发现有websocket客户端断开连接,
然后再去看代码
super.afterConnectionClosed(session, closeStatus);
这一行代码不清楚做了什么操作,但可以肯定是客户端下线,服务器做了一些操作,
并且有操作失败了。
3. 解决
1. 开发环境并没有该错误,说明超时原因与配置有关
2. 生产环境与开发环境唯一的区别就是,生产环境使用nginx做了端口映射
3. 经过查询发现,nginx代理websocket需要特殊配置
4. 剩下的就交给运维同事了,经过测试,正常使用,无异常出现