ws/wss क्लाइंट के रूप में Workerman
कभी-कभी Workerman को ws/wss प्रोटोकॉल के साथ एक सर्वर से कनेक्ट करने और इसके साथ बातचीत करने के लिए क्लाइंट के रूप में कार्य करने की आवश्यकता होती है।
यहां एक उदाहरण दिया गया है।
Workerman को ws क्लाइंट के रूप में
<?php
use Workerman\Worker;
use Workerman\Connection\AsyncTcpConnection;
require_once __DIR__ . '/vendor/autoload.php';
$worker = new Worker();
$worker->onWorkerStart = function($worker){
$con = new AsyncTcpConnection('ws://echo.websocket.org:80');
// websocket हैंडशेक सफल होने के बाद
$con->onWebSocketConnect = function(AsyncTcpConnection $con, ) {
$con->send('hello');
};
// जब संदेश प्राप्त होता है
$con->onMessage = function(AsyncTcpConnection $con, $data) {
echo $data;
};
$con->connect();
};
Worker::runAll();
Workerman को wss (ws+ssl) क्लाइंट के रूप में
<?php
use Workerman\Worker;
use Workerman\Connection\AsyncTcpConnection;
require_once __DIR__ . '/vendor/autoload.php';
$worker = new Worker();
$worker->onWorkerStart = function($worker){
// ssl के लिए 443 पोर्ट पर पहुंचना आवश्यक है
$con = new AsyncTcpConnection('ws://echo.websocket.org:443');
// ssl एन्क्रिप्टेड तरीके से एक्सेस के लिए सेट करें, जिससे यह wss बन जाए
$con->transport = 'ssl';
$con->onWebSocketConnect = function(AsyncTcpConnection $con) {
$con->send('hello');
};
$con->onMessage = function(AsyncTcpConnection $con, $data) {
echo $data;
};
$con->connect();
};
Worker::runAll();
Workerman को wss (ws+ssl) क्लाइंट + स्थानीय ssl सर्टिफिकेट के रूप में
<?php
use Workerman\Worker;
use Workerman\Connection\AsyncTcpConnection;
require_once __DIR__ . '/vendor/autoload.php';
$worker = new Worker();
$worker->onWorkerStart = function($worker){
// दूरस्थ होस्ट के स्थानीय आईपी और पोर्ट तथा ssl सर्टिफिकेट को एक्सेस करने के लिए सेट करें
$context_option = array(
// ssl विकल्प, संदर्भित करें http://php.net/manual/zh/context.ssl.php
'ssl' => array(
// स्थानीय सर्टिफिकेट पथ। इसे PEM प्रारूप में होना चाहिए और स्थानीय सर्टिफिकेट और निजी कुंजी शामिल होनी चाहिए।
'local_cert' => '/your/path/to/pemfile',
// local_cert फ़ाइल का पासवर्ड।
'passphrase' => 'your_pem_passphrase',
// क्या स्व-हस्ताक्षरित सर्टिफिकेट की अनुमति है।
'allow_self_signed' => true,
// क्या SSL सर्टिफिकेट को सत्यापित करने की आवश्यकता है।
'verify_peer' => false
)
);
// ssl के लिए 443 पोर्ट पर पहुंचना आवश्यक है
$con = new AsyncTcpConnection('ws://echo.websocket.org:443', $context_option);
// ssl एन्क्रिप्टेड तरीके से एक्सेस के लिए सेट करें, जिससे यह wss बन जाए
$con->transport = 'ssl';
$con->onWebSocketConnect = function(AsyncTcpConnection $con) {
$con->send('hello');
};
$con->onMessage = function(AsyncTcpConnection $con, $data) {
echo $data;
};
$con->connect();
};
Worker::runAll();
अन्य सेटिंग्स
<?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");
// हर 55 सेकंड में सर्वर को एक opcode के साथ 0x9 का websocket पिंग भेजें
$ws_connection->websocketPingInterval = 55;
// कस्टम http हेडर सेट करें
$ws_connection->headers = ['token' => 'value'];
// डेटा प्रकार सेट करें, डिफ़ॉल्ट BINARY_TYPE_BLOB है
$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();