Я использую Symfony2 для создания простого приложения чата. Я решил использовать GeniusesOfSymfony/WebSocketBundle для моего WebSocket, который работает на Ratchet:
https://github.com/GeniusesOfSymfony/WebSocketBundle
Мне удалось заставить чат работать, используя PubSub, но я хочу вместо этого использовать интеграцию push: я хочу, чтобы клиент отправлял сообщение через AJAX на мой контроллер Symfony2, который, в свою очередь, должен передавать сообщение всем клиентам WebSocket.
Я следовал за этой страницей документации:
https://github.com/GeniusesOfSymfony/WebSocketBundle/blob/master/Resources/docs/Pusher.md
Я пытался использовать как ZMQ, так и Websocket Pusher.
С ZMQ, когда я запускаю websocket, я получаю уведомление cmd:
Прослушивание транспорта ZMQ на 127.0.0.1:5555
Однако отправка сообщений не работает:
$pusher = $this->container->get("gos_web_socket.zmq.pusher");
//push(data, route_name, route_arguments)
$pusher->push(["type" => "newMessage", "text" => $request->request->get("msg")], "chat_topic");
Это метод onPush в моем классе ChatTopic:
class ChatTopic implements TopicInterface, PushableTopicInterface {
public function onPush(Topic $topic, WampRequest $request, $data, $provider) {
$topic->broadcast($data);
}
}
Метод onPush никогда не вызывается. Кроме того, события толкателя никогда не запускаются. Там, кажется, не исключение в коде.
С WebSocket Pusher я даже не могу запустить сервис. В cmd нет уведомлений, как в ZMQ, и с netstat
команды netstat
я не смог обнаружить, что он прослушивает порт 1337. Когда я пытаюсь нажать на него, я получаю исключение:
Не удалось открыть сокет. Причина: не удалось установить соединение, потому что целевой компьютер активно отказался от него
Вероятно, потому что нет службы, слушающей порт 1337.
PS - Я на Windows 10 и использую сервер WAMP. Я успешно установил расширение ZMQ на WAMP, как указано в phpinfo()
.