首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用Amphp捕获php websocket中断的TCP连接异常?

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

Stack Overflow用户
提问于 2019-11-26 18:01:06
回答 1查看 393关注 0票数 0

下面是我正在运行的当前WebSocket循环,而该连接仍然处于活动状态。但是在连续连接了11个小时之后,我收到了一个例外

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

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

代码语言:javascript
复制
     \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

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-02 16:51:28

通过查找ClosedException并在抛出之后运行其他任务,我找到了解决这个问题的方法。

代码语言:javascript
复制
\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
        }
    }
);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59056896

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档