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