Протокол ws
В настоящее время версия протокола ws в Workerman составляет 13.
Workerman может действовать в качестве клиента и инициировать подключение через протокол ws к удаленному веб-сокет серверу для двусторонней связи.
Обратите внимание
Протокол ws может быть использован только через AsyncTcpConnection в качестве клиента и не может слушать протокол веб-сокет сервера. То есть следующая запись является неверной.
$worker = new Worker('ws://0.0.0.0:8080');
Если вы хотите использовать Workerman в качестве сервера веб-сокетов, используйте протокол веб-сокетов.
Пример использования протокола ws в качестве клиента веб-сокета:
<?php
require_once __DIR__ . '/vendor/autoload.php';
use Workerman\Protocols\Ws;
use Workerman\Worker;
use Workerman\Connection\AsyncTcpConnection;
$worker = new Worker();
// При запуске процесса
$worker->onWorkerStart = function()
{
// Подключение к удаленному веб-сокет серверу с помощью протокола веб-сокета
$ws_connection = new AsyncTcpConnection("ws://127.0.0.1:1234");
// Отправка сердечного импульса веб-сокет серверу с опкодом 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";
};
// После установки веб-сокет соединения (необязательно)
$ws_connection->onWebSocketConnect = function(AsyncTcpConnection $con, $response) {
echo $response;
$con->send('hello');
};
// При получении сообщения от удаленного веб-сокет сервера
$ws_connection->onMessage = function($connection, $data){
echo "recv: $data\n";
};
// При возникновении ошибки соединения, обычно при неудачной попытке соединения с удаленным веб-сокет сервером (необязательно)
$ws_connection->onError = function($connection, $code, $msg){
echo "error: $msg\n";
};
// При отключении соединения с удаленным веб-сокет сервером (необязательно, рекомендуется выполнить повторное подключение)
$ws_connection->onClose = function($connection){
echo "connection closed and try to reconnect\n";
// Если соединение разорвано, попытка повторного подключения через 1 секунду
$connection->reConnect(1);
};
// После настройки всех вышеперечисленных обратных вызовов, выполняем операцию подключения
$ws_connection->connect();
};
Worker::runAll();
Больше информации в разделе Как использовать в качестве клиента ws/wss.