2016-04-28 29 views
0

Meine Frage ist spezifisch für die Verwendung von Slack RTM auf Ratchetphp/Klinke. Ich habe unter Code, der gut verbindet aber schließlich stirbt.Probleme mit Ratchetphp/Pawl Websocket Client

  <?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(); 

Beim Laufen, der Ausgang ist:

  [email protected]:/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) 
      [email protected]:/var/www/html/slack# 

Der websocket Teil slack rtm api ist (https://api.slack.com/rtm). Es scheint, als wäre beim Lesen auf leerem Websocket die Verbindung geschlossen. Ich denke, es könnte so sein, als ob wir über die WebSocket gesendete Slack-Events (https://api.slack.com/events) abhören, um zu verhindern, dass die Verbindung unterbrochen wird.

Momentan funktioniert dies wegen eines Verbindungsabbruchfehlers nicht.

+1

Können Sie uns eine Vorstellung davon geben, wie lange dieser Code läuft, bevor die Verbindung geschlossen wird? Verwendet diese Bibliothek WebSocket Ping- und Pong-Nachrichten? Wenn nicht, müssen Sie möglicherweise mit der Slack-API-Version von diesen umgehen: https://api.slack.com/rtm#ping_and_pong. – smarx

+0

@smarx der Code wird fast sofort getrennt (d. H. 1 Sekunde oder so). Willst du sagen, dass ich Ping-Nachrichten hinzufügen muss, um die Socket-Verbindung am Leben zu erhalten? Willst du damit sagen, dass ich einen anderen Ansatz als eine Event-Schleife verwenden muss und stattdessen eine while (1) -Schleife verwenden soll? In dieser while (1) Schleife werde ich weiterhin ping senden, um die Socket-Verbindung am Leben zu erhalten? Bitte erkläre. – vishwakarma09

+0

Ich würde sagen, wenn Sie fast sofort getrennt werden, ist es wahrscheinlich kein Ping/Pong-Problem. – smarx

Antwort

1

Hello World! ist keine gültige Nachricht für diese API, daher schließt Slack die Verbindung, wenn diese Nachricht empfangen wird. Versuchen Sie, etwas Gültiges (oder gar nichts) zu senden.