โปรโตคอล ws
ขณะนี้เวอร์ชันโปรโตคอลของ Workerman คือ เวอร์ชัน 13.
workerman สามารถทำหน้าที่เป็นไคลเอ็นต์ โดยใช้โปรโตคอล ws เพื่อเชื่อมต่อ websocket ไปยังเซิร์ฟเวอร์ websocket ระยะไกลเพื่อให้เกิดการสื่อสารสองทาง
โปรดทราบ
โปรโตคอล ws นั้นสามารถใช้ AsyncTcpConnection ในการทำงานเป็นไคลเอ็นต์เท่านั้น และไม่สามารถใช้เป็นโปรโตคอลที่ใช้ฟังก์ชันการเข้าฟังการเชื่อมต่อเป็นเซิร์ฟเวอร์ได้ กล่าวคือ การใช้งานดังตัวอย่างต่อไปนี้ คือ ไม่ถูกต้อง
$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 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);
};
// เมื่อตั้งค่า callback ทั้งหมดเรียบร้อย ให้ดำเนินการเชื่อมต่อ
$ws_connection->connect();
};
Worker::runAll();
ดูข้อมูลเพิ่มเติมที่ เป็นไคลเอ็นต์ ws/wss