Skip to content
This repository was archived by the owner on Mar 24, 2025. It is now read-only.

Commit 3a312b7

Browse files
committed
check fd connection before push
1 parent 1930f3d commit 3a312b7

File tree

2 files changed

+12
-7
lines changed

2 files changed

+12
-7
lines changed

src/Server/Manager.php

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -256,11 +256,15 @@ public function onTask(HttpServer $server, $taskId, $fromId, $data)
256256
{
257257
$this->container['events']->fire('swoole.task', func_get_args());
258258

259-
// push websocket message
260-
if ($this->isWebsocket
261-
&& array_key_exists('action', $data)
262-
&& $data['action'] === Websocket::PUSH_ACTION) {
263-
$this->pushMessage($server, $data['data'] ?? []);
259+
try {
260+
// push websocket message
261+
if ($this->isWebsocket
262+
&& array_key_exists('action', $data)
263+
&& $data['action'] === Websocket::PUSH_ACTION) {
264+
$this->pushMessage($server, $data['data'] ?? []);
265+
}
266+
} catch (Exception $e) {
267+
$this->logServerError($e);
264268
}
265269
}
266270

src/Websocket/CanWebsocket.php

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ public function pushMessage(Server $server, array $data)
119119
$message = $this->formatter->output($event, $data['message']);
120120

121121
// attach sender if not broadcast
122-
if (! $broadcast && ! in_array($sender, $fds)) {
122+
if (! $broadcast && $sender && ! in_array($sender, $fds)) {
123123
$fds[] = $sender;
124124
}
125125

@@ -132,8 +132,9 @@ public function pushMessage(Server $server, array $data)
132132
}
133133
}
134134

135+
// push message to designated fds
135136
foreach ($fds as $fd) {
136-
if ($broadcast && $sender === (integer) $fd) {
137+
if (($broadcast && $sender === (integer) $fd) || ! $server->exist($fd)) {
137138
continue;
138139
}
139140
$server->push($fd, $message, $opcode);

0 commit comments

Comments
 (0)