PHP-клиент websocket не работает - PullRequest
0 голосов
/ 24 августа 2018

Я хочу использовать веб-сокеты в существующем чате, и у меня есть следующий код (из примеров из socketo.me):

Толкатель

class Pusher implements WampServerInterface
{
    protected $subscribedTopics = [];

    public function onSubscribe(ConnectionInterface $conn, $topic)
    {
        var_dump('on subscribe');die;
    }

    public function onPushEventData($event)
    {
        var_dump('push event');die;
    }
}

сервер WebSocket

public function actionStartSocket()
{
    $loop   = \React\EventLoop\Factory::create();
    $pusher = new Pusher();

    $context = new \React\ZMQ\Context($loop);
    $pull = $context->getSocket(\ZMQ::SOCKET_PULL);

    $pull->bind('tcp://127.0.0.1:5555');

    $pull->on('message', array($pusher, 'onPushEventData'));

    $webSock = new \React\Socket\Server('127.0.0.1:8081', $loop);
    $webServer = new IoServer(
        new HttpServer(
            new WsServer(
                new WampServer(
                    $pusher
                )
            )
        ),
        $webSock
    );

    $loop->run();
}

И у меня есть метод для хранения сообщений в базе данных. Данные поступают в POST запросе от Ajax и, если они успешно сохраняются, отправляют сообщение в websocket и возвращают сохраненный объект клиенту.

$message = $this->saveMessage($dialog, $currentUser, (string)$message);

$context = new \ZMQContext();
$socket = $context->getSocket(\ZMQ::SOCKET_PUSH);
$socket->connect("tcp://127.0.0.1:5555");

$socket->send(json_encode([
    "status" => true
]));

return $message;

Я не могу отправить данные с сервера на веб-сокет. Я использую Apache в качестве веб-сервера и считаю, что конфигурация virtualHost неверна.

Windows 10

Apache 2.4.33 и модули: proxy proxy_http proxy_wstunnel

PHP 7.2.4

Храповик (http://socketo.me) Кто-нибудь сталкивался с подобной проблемой?

Config:

<VirtualHost *:80>
    ServerName proj
    DocumentRoot "c:/proj"
    <Directory "c:/proj/">
        Options +Indexes +Includes +FollowSymLinks
        +MultiViews AllowOverride All Require local
    </Directory>

    RewriteEngine on
    RewriteCond %{QUERY_STRING} transport=polling
    RewriteRule /(.*)$ http://127.0.0.1:5555/$1 [P]

    ProxyRequests off
    ProxyPass / ws://127.0.0.1:5555
</VirtualHost>
...