ws协议

На данный момент версия ws-протокола Workerman составляет 13.

Workerman может выступать в роли клиента, устанавливая соединение WebSocket через ws-протокол с удалённым WebSocket-сервером для обеспечения двунаправленной связи.

Внимание
Протокол ws можно использовать только через AsyncTcpConnection в качестве клиента, он не может быть использован для прослушивания протокола в качестве WebSocket-сервера. Это значит, что следующий код является неверным.

$worker = new Worker('ws://0.0.0.0:8080');

Если вы хотите использовать Workerman в качестве WebSocket-сервера, воспользуйтесь websocket-протоколом.

Пример ws в качестве протокола клиента WebSocket:

<?php
require_once __DIR__ . '/vendor/autoload.php';

use Workerman\Protocols\Ws;
use Workerman\Worker;
use Workerman\Connection\AsyncTcpConnection;

$worker = new Worker();
// При старте процесса
$worker->onWorkerStart = function()
{
    // Подключение к удалённому WebSocket-серверу через протокол WebSocket
    $ws_connection = new AsyncTcpConnection("ws://127.0.0.1:1234");
    // Отправка сообщения WebSocket с opcode 0x9 на сервер каждые 55 секунд (по желанию)
    $ws_connection->websocketPingInterval = 55;
    // Установка HTTP заголовков (по желанию)
    $ws_connection->headers = [
        'Cookie' => 'PHPSID=82u98fjhakfusuanfnahfi; token=2hf9a929jhfihaf9i',
        'OtherKey' => 'values'
    ];
    // Установка типа данных (по желанию)
    $ws_connection->websocketType = Ws::BINARY_TYPE_BLOB; // BINARY_TYPE_BLOB для текста, BINARY_TYPE_ARRAYBUFFER для бинарных данных
    // При успешном завершении трехстороннего рукопожатия TCP (по желанию)
    $ws_connection->onConnect = function($connection){
        echo "tcp connected\n";
    };
    // При завершении рукопожатия WebSocket (по желанию)
    $ws_connection->onWebSocketConnect = function(AsyncTcpConnection $con, $response) {
        echo $response;
        $con->send('hello');
    };
    // Когда сервер WebSocket отправляет сообщение
    $ws_connection->onMessage = function($connection, $data){
        echo "recv: $data\n";
    };
    // При возникновении ошибки соединения, как правило, ошибки подключения к удалённому WebSocket-серверу (по желанию)
    $ws_connection->onError = function($connection, $code, $msg){
        echo "error: $msg\n";
    };
    // Когда соединение с удалённым WebSocket-сервером разрывается (по желанию, рекомендуется осуществлять повторное подключение)
    $ws_connection->onClose = function($connection){
        echo "connection closed and try to reconnect\n";
        // Если соединение разорвано, повторно подключиться через 1 секунду
        $connection->reConnect(1);
    };
    // После настройки всех вышеперечисленных колбеков выполняем операцию подключения
    $ws_connection->connect();
};
Worker::runAll();

Дополнительная информация как клиент ws/wss