客户端一直保持连接中,没有出现过中断的情况。但是在查找app.io.sockets.sockets的时候,会出现有时候能查到,有时候为空的情况。
例如:客户端1和客户端2,一直保持连接中,我进行广播的时候查找app.io.sockets.sockets会出现以下几种情况:
第一次发消息查到了socket,过几秒再查就没有了,过几秒再查又有了。
有时候还会出现报错:
403 ERROR 32088 A client (undefined:NaN) error [ECONNRESET] occurred: read ECONNRESET
请问是什么原因?该如何解决?谢谢~
图:


我服务器上是用pm2部署的。本地测试不会有这种情况。刚刚服务器上换成了egg内置的部署方法,没有出现上述情况了。
不要用 pm2 吧,没测试过 pm2, 而且EGG也不需要 pm2 ,别用就行了
ERROR 51170 A client (::ffff:127.0.0.1:58655) error [ECONNRESET] occurred: read ECONNRESET
客户端刷新的时候报错,这个报错该如何解决?
遇见了新问题。
使用安卓客户端连接,断开和连接的时候都能获取到socket对象,但是this.app.io.sockets.sockets查看的时候或者存储到app.config查看的时候,发现没有安卓客户端的socket对象(连接并没有断开过)。pc浏览器连接正常。
我对比了一下安卓客户端和pc客户端的socket对象区别,发现只有一点区别:pc的xdomain: true,安卓的xdomain: false。
不知道安卓客户端的丢失是因为什么原因造成的?
神奇地可以找到对象了!然而我没有改动什么。。。发现这种现象会随机出现。今天测试出现部分客户端丢失,连接和断开的时候都能看到ctx.socket,但是在controller中查看this.app.io.sockets.sockets的时候,部分客户端就没有了,中途没有断开过:(
看了一下日志,好像是进程不同造成的。如果几个socket对象不在同一个进程,那么该如何获取到所有的socket对象呢?
上面不同进程的问题解决了,通过redis的sub、pub进行订阅和广播。进程之间要注意公共数据的同步。
@Cheese-Yu 为啥一定要用 pub/sub 呢,直接 get/set 不行?
@pengkobe 因为我需要主动通知其他进程的socket对象,所以用了pub/sub
还有一种报错是:ERROR 11644 A client (::ffff:59.58.125.74:54237) error [HPE_INVALID_METHOD] occurred: Parse Error
问题都解决了吧,关了,有需要再开。
还有一种报错是:ERROR 11644 A client (::ffff:59.58.125.74:54237) error [HPE_INVALID_METHOD] occurred: Parse Error
我也遇到这问题了,你找到问题所在了不
Most helpful comment
还有一种报错是:ERROR 11644 A client (::ffff:59.58.125.74:54237) error [HPE_INVALID_METHOD] occurred: Parse Error