Giao thức ws
Hiện tại, phiên bản giao thức ws của Workerman là 13.
Workerman có thể hoạt động như một khách hàng, khởi tạo kết nối websocket qua giao thức ws, kết nối đến máy chủ websocket từ xa, thực hiện truyền thông hai chiều.
Lưu ý
Giao thức ws chỉ có thể được sử dụng như một khách hàng thông qua AsyncTcpConnection, không thể nghe giao thức như máy chủ websocket. Điều này có nghĩa là đoạn mã sau là sai.
$worker = new Worker('ws://0.0.0.0:8080');
Nếu muốn sử dụng Workerman như một máy chủ websocket, vui lòng sử dụng giao thức websocket.
Ví dụ về khách hàng websocket sử dụng ws:
<?php
require_once __DIR__ . '/vendor/autoload.php';
use Workerman\Protocols\Ws;
use Workerman\Worker;
use Workerman\Connection\AsyncTcpConnection;
$worker = new Worker();
// Khi tiến trình khởi động
$worker->onWorkerStart = function()
{
// Kết nối đến máy chủ websocket từ xa bằng giao thức websocket
$ws_connection = new AsyncTcpConnection("ws://127.0.0.1:1234");
// Gửi một gói ping websocket với opcode là 0x9 đến máy chủ mỗi 55 giây (tùy chọn)
$ws_connection->websocketPingInterval = 55;
// Thiết lập tiêu đề http (tùy chọn)
$ws_connection->headers = [
'Cookie' => 'PHPSID=82u98fjhakfusuanfnahfi; token=2hf9a929jhfihaf9i',
'OtherKey' => 'values'
];
// Thiết lập loại dữ liệu (tùy chọn)
$ws_connection->websocketType = Ws::BINARY_TYPE_BLOB; // BINARY_TYPE_BLOB là văn bản, BINARY_TYPE_ARRAYBUFFER là nhị phân
// Khi TCP hoàn thành ba lần bắt tay (tùy chọn)
$ws_connection->onConnect = function($connection){
echo "tcp connected\n";
};
// Khi websocket hoàn thành bắt tay (tùy chọn)
$ws_connection->onWebSocketConnect = function(AsyncTcpConnection $con, $response) {
echo $response;
$con->send('hello');
};
// Khi máy chủ websocket từ xa gửi tin nhắn
$ws_connection->onMessage = function($connection, $data){
echo "recv: $data\n";
};
// Khi xảy ra lỗi kết nối, thường là lỗi kết nối đến máy chủ websocket từ xa không thành công (tùy chọn)
$ws_connection->onError = function($connection, $code, $msg){
echo "error: $msg\n";
};
// Khi kết nối đến máy chủ websocket từ xa bị ngắt (tùy chọn, khuyên nên thực hiện kết nối lại)
$ws_connection->onClose = function($connection){
echo "connection closed and try to reconnect\n";
// Nếu kết nối bị ngắt, thực hiện kết nối lại sau 1 giây
$connection->reConnect(1);
};
// Sau khi thiết lập các callback trên, thực hiện kết nối
$ws_connection->connect();
};
Worker::runAll();
Tham khảo thêm về việc sử dụng ws/wss như khách hàng