В настоящее время я использую пример кода Ratchet PHP Websockets (http://socketo.me/docs/hello-world), и когда я пытаюсь запустить Websocket, он ничего не выводит, но показывает, что он "живой".
На моем веб-сайте я использую тот же код JS, что и в примере, за исключением использования wss://
, поскольку мой веб-сайт проходит через Cloudflare SSL. Теперь мой вопрос: когда я пытаюсь подключиться к веб-сокету, в моих инструментах разработчика Chrome он просто постоянно показывает ожидающие и завершит работу, если я выключу веб-сокет.
Я не могу найти способ отладки того, что происходит с ним, я использую порты, которые позволяет мне использовать Cloudflare (т. Е. 8443), и я нахожусь в плане, где Websockets поддерживаются Cloudflare. Но я не могу найти никаких ответов об использовании Websockets через cloudflare, и когда я включаю error_reporting
, он тоже ничего не выводит.
Это что-то с Cloudflare? Когда я набираю php runwebsocket.php
это должно выводить что-то, кроме ничего?
Когда я использовал этот сценарий для веб-сокетов (https://github.com/ghedipunk/PHP-Websockets), он выводил бы, если клиент подключился к сокету, но все равно вызывал бы ту же проблему, когда он фактически не полностью подключался к нему.
РЕДАКТИРОВАТЬ: Когда я захожу на сайт тестирования Websocket Echo, когда я пытаюсь подключиться к своему сокету, он просто ничего не выводит.
** РЕДАКТИРОВАНИЕ № 2:
<?php
ini_set('display_errors', 1);
error_reporting(E_ALL);
require('vendor/autoload.php'); // composer require cboden/ratchet
use Ratchet\Server\IoServer;
use Ratchet\Http\HttpServer;
use Ratchet\WebSocket\WsServer;
use AppSocket\Notifications;
$server = IoServer::factory(
new HttpServer(
new WsServer(
new Notifications()
)
),
8443
);
$server->run();
Код для AppSocket\Notifications
<?php
namespace AppSocket;
use Ratchet\MessageComponentInterface;
use Ratchet\ConnectionInterface;
class Notifications implements MessageComponentInterface {
protected $clients;
public function __construct() {
$this->clients = new \SplObjectStorage;
}
public function onOpen(ConnectionInterface $conn) {
$this->clients->attach($conn);
echo "New connection! ({$conn->resourceId})\n";
}
public function onMessage(ConnectionInterface $from, $msg) {
foreach ($this->clients as $client) {
if ($from !== $client) {
$client->send($msg);
}
}
echo "Yay";
}
public function onClose(ConnectionInterface $conn) {
$this->clients->detach($conn);
echo "Connection {$conn->resourceId} has disconnected\n";
}
public function onError(ConnectionInterface $conn, \Exception $e) {
echo "An error has occurred: {$e->getMessage()}\n";
$conn->close();
}
}