如何使用 Amphp 捕获 php websocket 断开的 TCP 连接异常?



这是我在连接仍处于活动状态时正在运行的当前 WebSocket 循环。但是连续连接 11 小时后,我收到了异常

"exception":"[object] (Amp\Websocket\ClosedException(code: 1006): The connection was closed: Client closed the underlying TCP connection at ...

如何检查关闭的连接或异常本身?,这样我就可以正确结束脚本逻辑而不会突然失败。

AmpLoop::run(function () use ($fn, $st)
{
$connection = yield AmpWebsocketconnect('wss://URL');
yield $connection->send('{"action":"auth","params":"KEYID"}');
yield $connection->send('{"action":"subscribe","params":"'.$st.'"}');
$i = 0;
while ($message = yield $connection->receive()) 
{
$i++;
$payload = yield $message->buffer();
$r = $fn($payload, $i);
if ($r == false) {
$connection->close();
break;
}
}
}
);

我正在使用这个 Amphp 网络套接字:https://github.com/amphp/websocket-client

谢谢!

我确实通过查找ClosedException并在抛出后运行其他任务来找到解决方案。

AmpLoop::run(function () use ($fn, $st)
{
try 
{
$connection = yield AmpWebsocketconnect('wss://URL');
yield $connection->send('{"action":"auth","params":"KEYID"}');
yield $connection->send('{"action":"subscribe","params":"'.$st.'"}');
$i = 0;
while ($message = yield $connection->receive()) 
{
$i++;
$payload = yield $message->buffer();
$r = $fn($payload, $i);
if ($r == false) {
$connection->close();
break;
}
}
}
catch (AmpWebsocketClosedException $e) 
{
// do something here
}
}
);

最新更新