بروتوكول ws
حالياً إصدار بروتوكول ws في Workerman هو 13.
يمكن أن يعمل Workerman كعميل من خلال بروتوكول ws لبدء اتصال websocket إلى خادم 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 كل 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\n";
};
// عند اكتمال مصافحة websocket (اختياري)
$ws_connection->onWebSocketConnect = function(AsyncTcpConnection $con, $response) {
echo $response;
$con->send('hello');
};
// عند تلقي رسالة من خادم websocket البعيد
$ws_connection->onMessage = function($connection, $data){
echo "استلام: $data\n";
};
// عند حدوث خطأ في الاتصال، عادةً ما يكون خطأ في فشل الاتصال بخادم websocket البعيد (اختياري)
$ws_connection->onError = function($connection, $code, $msg){
echo "خطأ: $msg\n";
};
// عند قطع الاتصال بخادم websocket البعيد (اختياري، من المستحسن إضافة إعادة الاتصال)
$ws_connection->onClose = function($connection){
echo "تم إغلاق الاتصال وحاول إعادة الاتصال\n";
// إذا قطع الاتصال، أعد الاتصال بعد 1 ثانية
$connection->reConnect(1);
};
// بعد إعداد جميع الردود أعلاه، قم بتنفيذ عملية الاتصال
$ws_connection->connect();
};
Worker::runAll();
مزيد من المعلومات كعميل ws/wss