WebSocket प्रोटोकॉल

वर्तमान में Workerman का WebSocket प्रोटोकॉल संस्करण 13 है।

WebSocket प्रोटोकॉल HTML5 का एक नया प्रोटोकॉल है। यह ब्राउज़र और सर्वर के बीच पूर्ण द्विअर्थ संचार को लागू करता है।

WebSocket और TCP के बीच संबंध

WebSocket और HTTP दोनों एक एप्लिकेशन स्तर के प्रोटोकॉल हैं, जो TCP पर आधारित हैं, WebSocket स्वयं और सॉकेट के बीच ज्यादा संबंध नहीं है, और इन्हें एक समान नहीं माना जा सकता।

WebSocket प्रोटोकॉल हैंडशेक

WebSocket प्रोटोकॉल में एक हैंडशेक प्रक्रिया होती है, हैंडशेक के समय ब्राउज़र और सर्वर HTTP प्रोटोकॉल के माध्यम से संवाद करते हैं, Workerman में आप इस हैंडशेक प्रक्रिया में इस प्रकार से हस्तक्षेप कर सकते हैं।

जब workerman <= 4.1 हो

<?php
require_once __DIR__ . '/vendor/autoload.php';

use Workerman\Connection\TcpConnection;
use Workerman\Worker;

$ws = new Worker('websocket://0.0.0.0:8181');
$ws->onConnect = function($connection)
{
    $connection->onWebSocketConnect = function($connection , $httpBuffer)
    {
        // यहां पर आप कनेक्शन के स्रोत को वैधता की जांच कर सकते हैं, यदि वैध नहीं है तो कनेक्शन को बंद कर दें
        // $_SERVER['HTTP_ORIGIN'] यह बताता है कि websocket कनेक्शन किस साइट के पृष्ठ से शुरू हुआ है
        if($_SERVER['HTTP_ORIGIN'] != 'https://www.workerman.net')
        {
            $connection->close();
        }
        // onWebSocketConnect में $_GET $_SERVER उपलब्ध हैं
        // var_dump($_GET, $_SERVER);
    };
};
Worker::runAll();

जब workerman >= 5.0 हो

<?php
require_once __DIR__ . '/vendor/autoload.php';

use Workerman\Connection\TcpConnection;
use Workerman\Protocols\Http\Request;
use Workerman\Worker;

$worker = new Worker('websocket://0.0.0.0:12345');
$worker->onWebSocketConnect = function (TcpConnection $connection, Request $request) {
    if ($request->header('origin') != 'https://www.workerman.net') {
        $connection->close();
    }
    var_dump($request->get());
    var_dump($request->header());
};
Worker::runAll();

WebSocket प्रोटोकॉल द्वारा बाइनरी डेटा का संचरण

WebSocket प्रोटोकॉल डिफ़ॉल्ट रूप से केवल utf8 पाठ को प्रसारित कर सकता है, यदि बाइनरी डेटा को प्रसारित करना है, तो कृपया निम्नलिखित भाग पढ़ें।

WebSocket प्रोटोकॉल में प्रोटोकॉल हेडर में एक संकेतक का उपयोग किया जाता है यह इंगित करने के लिए कि क्या बाइनरी डेटा या utf8 पाठ डेटा का संचरण हो रहा है, ब्राउज़र संकेतक और भेजे गए सामग्री के प्रकार की पुष्टि करेगा, यदि यह मेल नहीं खाता है तो यह त्रुटि देगा और कनेक्शन बंद कर देगा।

इसलिए सर्वर को डेटा भेजते समय इस संकेतक को भेजने वाले डेटा के प्रकार के अनुसार सेट करने की आवश्यकता होती है, Workerman में यदि यह सामान्य utf8 पाठ है, तो इसे सेट करने की आवश्यकता नहीं होती (डिफ़ॉल्ट रूप से यह मूल्य है)

use Workerman\Protocols\Websocket;
$connection->websocketType = Websocket::BINARY_TYPE_BLOB;

यदि यह बाइनरी डेटा है, तो इसे सेट करें

use Workerman\Protocols\Websocket;
$connection->websocketType = Websocket::BINARY_TYPE_ARRAYBUFFER;

ध्यान दें: यदि $connection->websocketType सेट नहीं किया गया है, तो $connection->websocketType डिफ़ॉल्ट रूप से BINARY_TYPE_BLOB (यानी utf8 पाठ प्रकार) होगा। सामान्य एप्लिकेशन में प्रेषित डेटा आमतौर पर utf8 पाठ होते हैं, जैसे कि json डेटा। इसलिए $connection->websocketType को मैन्युअल रूप से सेट करने की आवश्यकता नहीं होती। केवल तब जब बाइनरी डेटा का संचरण हो (जैसे कि चित्र डेटा, protobuffer डेटा आदि) तब इस गुण को BINARY_TYPE_ARRAYBUFFER पर सेट करें।

Workerman को WebSocket क्लाइंट के रूप में उपयोग करना

आप AsyncTcpConnection क्लास का उपयोग कर ws प्रोटोकॉल के साथ Workerman को दूरस्थ WebSocket सर्वर से जोड़ने के लिए उपयोग कर सकते हैं और द्विदिश वास्तविक समय संचार पूरा कर सकते हैं।