Closed caijwei closed 4 months ago
close_frame只有正常关闭或者主动发送服务端才能收到,如果是客户端非正常关闭,close_frame没法由客户端发出,服务端此时会知道客户端关闭了,从而执行ocClose事件,可以说close事件只针对tcp连接的关闭。
比如https://github.com/swoole/swoole-src/issues/2121提到的非正常关闭,比如服务器通过disconnect断开连接,都不会触发onMessage
onMessage 是指接收到来自客户端的消息,close frame
本质上也是一种应用层面的消息。服务端 disconnect
的过程中,并不会有客户端向服务器发送消息,因此不会有 onMessage
,对应的是底层 TCP
连接的 onReceive
事件。
而 onConnect/onClose/onDisconncect
的语意是 TCP
连接的建立和断开,并非数据传输事件。
Please answer these questions before submitting your issue.
代码中需要用到closeCode来确定断开连接后,应该针对性的执行怎样的逻辑,但是onClose并没有这个值
文档中提到可以通过设置open_websocket_close_frame为true,将关闭帧挪到onMessage中执行,但是实际测试发现,并非所有的关闭连接场景都会发送关闭帧
比如WebSocket\Frame bug提到的非正常关闭,比如服务器通过disconnect断开连接,都不会触发onMessage
可否在onClose传递或通过某些方式可以获取到closeCode,毕竟closeCode是webSocket协议的标准,没理由没有啊
What did you see instead?
What version of Swoole are you using (show your
php --ri swoole
)?What is your machine environment used (show your
uname -a
&php -v
&gcc -v
) ?