За последние 24 часа нас посетили 22759 программистов и 1226 роботов. Сейчас ищут 699 программистов ...

чат websockets php ratchet

Тема в разделе "PHP для профи", создана пользователем TigerZaka, 23 авг 2018.

Метки:
  1. TigerZaka

    TigerZaka Активный пользователь

    С нами с:
    16 сен 2011
    Сообщения:
    189
    Симпатии:
    1
    Всем привет!

    Делаю чат на вебсокетах, использую ratchet. Делаю по примерам (http://socketo.me)

    реализую WampServerInterface
    PHP:
    1. class Pusher implements WampServerInterface
    2. {
    3.     protected $subscribedTopics = [];
    4.  
    5.     public function onSubscribe(ConnectionInterface $conn, $topic)
    6.     {
    7.         $subject = $topic->getId();
    8.         if (!array_key_exists($subject, $this->subscribedTopics))
    9.         {
    10.             $this->subscribedTopics[$subject] = $topic;
    11.         }
    12.     }
    13.  
    14.     public function onPushEventData($event)
    15.     {
    16.         var_dump('test');die; // хочу, чтобы как то среагировало
    17.         //$eventData = json_decode($event, true);
    18.     }
    Вот так запускаю ws сервер
    PHP:
    1. $loop   = \React\EventLoop\Factory::create();
    2.         $pusher = new Pusher();
    3.  
    4.         // Listen for the web server to make a ZeroMQ push after an ajax request
    5.         $context = new \React\ZMQ\Context($loop);
    6.         $pull = $context->getSocket(\ZMQ::SOCKET_PULL);
    7.         $pull->bind('tcp://127.0.0.1:5555');
    8.         $pull->on('message', array($pusher, 'onPushEventData'));
    9.  
    10.         $webSock = new \React\Socket\Server('127.0.0.1:8081', $loop);
    11.         $webServer = new IoServer(
    12.             new HttpServer(
    13.                 new WsServer(
    14.                     new WampServer(
    15.                         $pusher
    16.                     )
    17.                 )
    18.             ),
    19.             $webSock
    20.         );
    21.  
    22.         $loop->run();
    И есть метод, в который прилетает ajax запрос, по которому, мы сохраняем сообщение в базу
    PHP:
    1. $message = $this->createMessage($dialog, $currentUser, (string)$message);
    2.  
    3. $context = new \ZMQContext();
    4. $socket = $context->getSocket(\ZMQ::SOCKET_PUSH);
    5. $socket->connect("tcp://localhost:5555");
    6.  
    7. // здесь планирую отправлять данные для websocket сервера, но пока, хотя бы статус
    8. $socket->send(json_encode([
    9.      "status" => true
    10. ]));
    11.  
    12. и возвращаю обратно в ajax сохраненный объект
    13. return $message;
    Проблема в том, что сохранив объект, я получаю его в ответом в ajax, но на стороне ws ничего не происходит и ошибки нет

    Подскажите, что делаю не так, в какую сторону копать?
     
  2. TigerZaka

    TigerZaka Активный пользователь

    С нами с:
    16 сен 2011
    Сообщения:
    189
    Симпатии:
    1
    Возникает ощущение, что php просто не может подключиться к ws. Использую Apache
     
  3. TigerZaka

    TigerZaka Активный пользователь

    С нами с:
    16 сен 2011
    Сообщения:
    189
    Симпатии:
    1
    Подскажите, как настроить apache, чтобы он запросы типа tcp://127.0.0.1:8080 перебрасывал на ws://127.0.0.1:8080 ?
     
  4. Abyss

    Abyss Старожил

    С нами с:
    12 дек 2015
    Сообщения:
    1.298
    Симпатии:
    218
    Адрес:
    Default city
  5. TigerZaka

    TigerZaka Активный пользователь

    С нами с:
    16 сен 2011
    Сообщения:
    189
    Симпатии:
    1
    Спасибо!