【问题标题】:Issues using ratchetphp/Pawl websocket client使用 ratchetphp/Pawl websocket 客户端的问题
【发布时间】:2016-08-22 15:13:21
【问题描述】:

我的问题是针对在 ratchetphp/Pawl 上使用 slack rtm。我有下面的代码可以很好地连接但最终会死掉。

            <?php

            require_once "response.php";

            //first make authenticated call to rtm.start    
            use \Curl\Curl;
            $curl = new Curl();

            $rtmStartUrl = "https://slack.com/api/rtm.start?token=xx-xx-xx-xx-xx&pretty=1";
            $curl->get($rtmStartUrl);

            $wsUrl = $curl->response->url;

            $loop = React\EventLoop\Factory::create();
            $connector = new Ratchet\Client\Connector($loop);

            $connector($wsUrl)
            ->then(function(Ratchet\Client\WebSocket $conn) {
            $conn->on('message', function(\Ratchet\RFC6455\Messaging\MessageInterface $msg) use ($conn) {
            echo "Received: {$msg}\n";
            // $conn->close();
            });

            $conn->on('close', function($code = null, $reason = null) {
            echo "Connection closed ({$code} - {$reason})\n";
            });

            $conn->send('Hello World!');
            }, function(\Exception $e) use ($loop) {
            echo "Could not connect: {$e->getMessage()}\n";
            $loop->stop();
            });

            $loop->run();

运行时,输出为:

            root@ip-172-31-45-75:/var/www/html/slack# php pawl.php 
            Received: {"type":"hello"}
            Received: {"type":"reconnect_url","url":"wss://mpmulti-qpau.slack-msgs.com/websocket/jDkgDysXfZspRj10zqdcrshHK6PhPLItYx2HEkdXy47RPCAJwKgI_NLq0bhS4uMjIT7iRtOoCDUJffcxcr7YdiqMbITUZYqnTmT39Et5a8JeuPLFfCUUzan4MCz34p0jcfAKaQW9G9HpIWrYH4CTqyICZuhgWHnzo8K7dO2zXFc="}
            Received: {}
            Connection closed (1006 - Underlying connection closed)
            root@ip-172-31-45-75:/var/www/html/slack# 

websocket 是 slack rtm api (https://api.slack.com/rtm) 的一部分。似乎在读取空的 websocket 时,连接已关闭。我认为这可能就像我们收听通过 websocket 发送的松弛事件 (https://api.slack.com/events) 以避免断开连接。

目前,由于断开连接错误,这不起作用。

【问题讨论】:

  • 你能告诉我们这段代码在连接关闭之前运行了多长时间吗?另外,这个库是否使用 WebSocket ping 和 pong 消息?如果没有,您可能需要处理以下 Slack API 版本:api.slack.com/rtm#ping_and_pong。
  • @smarx 代码几乎立即断开连接(即 1 秒左右)。您是说我需要添加 ping 消息以保持套接字连接处于活动状态吗?你的意思是说我需要使用与事件循环不同的方法,而是使用 while(1) 循环。在那个 while(1) 循环中,我将继续发送 ping 以保持套接字连接处于活动状态?请解释一下。
  • 另一个猜测......它可能是“Hello World!”你在套接字上发送?这不是 Slack 将作为有效消息处理的东西......也许它会在收到该消息后挂断套接字。
  • 这真的很简单 :) 我如何将您的评论标记为答案?或者您需要再次发布答案。
  • 我发布了一个答案,以便您标记它。谢谢!

标签: slack-api phpwebsocket


【解决方案1】:

Hello World! 不是此 API 的有效消息,因此 Slack 在收到该消息时正在关闭连接。尝试发送有效的东西(或什么都不发送)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-27
    • 2015-08-16
    • 2016-06-28
    • 2015-06-18
    • 2017-08-27
    相关资源
    最近更新 更多