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.
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
@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
Ich würde sagen, wenn Sie fast sofort getrennt werden, ist es wahrscheinlich kein Ping/Pong-Problem. – smarx