egg socket.io 在连接关闭时,无法识别具体是哪个socket 关闭

Created on 25 Dec 2017  ·  8Comments  ·  Source: eggjs/egg

disconnect 或者 disconnecting 事件发生时,
this.ctx.socket = { remoteAddress: '127.0.0.1', remotePort: 7001 }
无法识别 具体是哪个连接断开了

enhancement

All 8 comments

https://github.com/eggjs/egg-socket.io/blob/master/lib/io.js#L75 具体看这里。断开时的socket和正常连接的socket是同一个对象。所以,检查一下你的转发服务是不是配错了,导致 remoteAddress 错误。

我也碰到这个问题了。。。一模一样的报错
由于是在本地开发,所以不存在啥转发服务

我知道了,因为 egg-core 里把 utils.callFn 写的是 async
,它最终会被解释成 promise ,然后又属于 Microtask , 等到它被执行的时候,在同步执行中的 onclose 早就把 socket 中有用信息给 remove

感觉这是个问题啊,建议可以再扩充一个同步版本的 utils.callFn,然后根据 handler 是不是 async 的来选择是否要用 async 的 utils.callFn 执行它。

有个快速能够修复的方法就是:写个连接中间,放在最前面,把 socket 信息复制存储到 ctx 上,这样当断开连接后,不会因为 socket 对象清空而拿不到信息。

至于插件层面怎么改进,我再研究一下。

感谢。

刚刚试了一下,发现了新问题,这次真不到原因了。。。

我直接改了 egg-socket.io 里的 lib/io.js 的源代码。。。
image

然后两次打出来的东西不一致,这就很致命了,我已经懵逼的不知所措了。。。

image

@anchengjian 试试 egg-socket.[email protected]

@ngot 解决了,666666

Was this page helpful?
0 / 5 - 0 ratings

Related issues

musicode picture musicode  ·  55Comments

popomore picture popomore  ·  70Comments

atian25 picture atian25  ·  68Comments

shaoshuai0102 picture shaoshuai0102  ·  52Comments

zlab picture zlab  ·  55Comments