下面是我正在运行的当前WebSocket循环,而该连接仍然处于活动状态。但是在连续连接了11个小时之后,我收到了一个例外
"exception":"[object] (Amp\\Websocket\\ClosedException(code: 1006): The connection was closed: Client closed the underlying TCP connection at ...
如何检查关闭的连接或异常本身?,这样我就可以正确地结束脚本逻辑而不会突然失败。
\Amp\Loop::run(function () use ($fn, $st)
{
$connection = yield \Amp\Websocket\connect('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 Websocket:https://github.com/amphp/websocket-client
谢谢!
发布于 2020-04-02 16:51:28
通过查找ClosedException并在抛出之后运行其他任务,我找到了解决这个问题的方法。
\Amp\Loop::run(function () use ($fn, $st)
{
try
{
$connection = yield \Amp\Websocket\connect('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 (\Amp\Websocket\ClosedException $e)
{
// do something here
}
}
);https://stackoverflow.com/questions/59056896
复制相似问题