From e6428a5603e5670619f4c42cbe28b7a638aea3d1 Mon Sep 17 00:00:00 2001 From: inhere Date: Mon, 13 Apr 2020 11:18:17 +0800 Subject: [PATCH] fix: swoft-cloud/swoft/issues/1222 compatible ws setting open_websocket_close_frame --- src/websocket-server/src/Swoole/MessageListener.php | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/websocket-server/src/Swoole/MessageListener.php b/src/websocket-server/src/Swoole/MessageListener.php index aaf210776..3c139cc69 100644 --- a/src/websocket-server/src/Swoole/MessageListener.php +++ b/src/websocket-server/src/Swoole/MessageListener.php @@ -31,6 +31,7 @@ use Swoole\Websocket\Server; use Throwable; use function server; +use const WEBSOCKET_OPCODE_CLOSE; /** * Class MessageListener @@ -55,7 +56,14 @@ class MessageListener implements MessageInterface public function onMessage(Server $server, Frame $frame): void { $fd = $frame->fd; - $sid = (string)$fd; + + // Fix: if setting: 'open_websocket_close_frame' => true + if ($frame->opcode === WEBSOCKET_OPCODE_CLOSE) { + CLog::info('Close ws#%d connection by close opcode message, reason: %s', $fd, $frame->reason); + // Swoft::getBean(CloseListener::class)->onClose($server, $fd, 0); + // NOTICE: swoole will auto call close event. + return; + } server()->log("Message: conn#{$fd} received message data", [], 'debug'); @@ -63,6 +71,7 @@ public function onMessage(Server $server, Frame $frame): void $response = Response::new($fd); /** @var WsMessageContext $ctx */ + $sid = (string)$fd; $ctx = WsMessageContext::new($request, $response); // Storage context