__construct विधि

void AsyncTcpConnection::__construct(string $remote_address, $context_option = null)

एक असिंक्रोनस कनेक्शन ऑब्जेक्ट बनाता है।

AsyncTcpConnection को Workerman को एक क्लाइंट के रूप में रिमोट सर्वर से असिंक्रोनस कनेक्शन शुरू करने की अनुमति देता है, और send इंटरफेस और onMessage कॉलबैक के माध्यम से कनेक्शन पर डेटा को असिंक्रोनस रूप से भेजने और संसाधित करने के लिए।

पैरामीटर

पैरामीटर:remote_address

कनेक्शन का पता, उदाहरण के लिए
tcp://www.baidu.com:80
ssl://www.baidu.com:443
ws://echo.websocket.org:80
frame://192.168.1.1:8080
text://192.168.1.1:8080

पैरामीटर:$context_option

यह पैरामीटर आवश्यक है(workerman >= 3.3.5)

सॉकेट संदर्भ सेट करने के लिए, उदाहरण के लिए, bindto का उपयोग करके यह तय करें कि किस (नेटवर्क कार्ड) आईपी और पोर्ट के माध्यम से बाहरी नेटवर्क तक पहुंच प्राप्त हो, ssl प्रमाणपत्र सेट करना आदि।

संदर्भ stream_context_createसॉकेट संदर्भ विकल्पSSL संदर्भ विकल्प

नोट

वर्तमान में AsyncTcpConnection द्वारा समर्थित प्रोटोकॉल में tcpsslwsframetext शामिल हैं।

कस्टम प्रोटोकॉल का समर्थन भी किया जाता है, देखेंकैसे कस्टम प्रोटोकॉल बनाएँ

其中ssl要求Workerman>=3.3.4,并安装openssl扩展

वर्तमान में http प्रोटोकॉल का AsyncTcpConnection के लिए समर्थन नहीं है।

आप new AsyncTcpConnection('ws://...') का उपयोग करके ब्राउज़र की तरह Workerman में websocket कनेक्शन रिमोट websocket सर्वर पर शुरू कर सकते हैं, देखेंउदाहरण。लेकिन आप new AsyncTcpConnection('websocket://...') के रूप में Workerman में websocket कनेक्शन शुरू नहीं कर सकते हैं।

उदाहरण

उदाहरण 1, असिंक्रोनस एक्सेस बाहरी http सेवा

use Workerman\Worker;
use Workerman\Connection\AsyncTcpConnection;
use Workerman\Connection\TcpConnection;
require_once __DIR__ . '/vendor/autoload.php';

$task = new Worker();
// प्रोसेस स्टार्ट करते समय www.baidu.com के लिए एक असिंक्रोनस कनेक्शन ऑब्जेक्ट बनाएं और डेटा भेजें
$task->onWorkerStart = function($task)
{
    // सीधे http को निर्दिष्ट करने का समर्थन नहीं है, लेकिन tcp का उपयोग करके http प्रोटोकॉल की नकल करके डेटा भेजा जा सकता है
    $connection_to_baidu = new AsyncTcpConnection('tcp://www.baidu.com:80');
    // जब कनेक्शन सफलतापूर्वक स्थापित हो जाता है, तो http अनुरोध डेटा भेजें
    $connection_to_baidu->onConnect = function(AsyncTcpConnection $connection_to_baidu)
    {
        echo "कनेक्ट सफल\n";
        $connection_to_baidu->send("GET / HTTP/1.1\r\nHost: www.baidu.com\r\nConnection: keep-alive\r\n\r\n");
    };
    $connection_to_baidu->onMessage = function(AsyncTcpConnection $connection_to_baidu, $http_buffer)
    {
        echo $http_buffer;
    };
    $connection_to_baidu->onClose = function(AsyncTcpConnection $connection_to_baidu)
    {
        echo "कनेक्शन बंद\n";
    };
    $connection_to_baidu->onError = function(AsyncTcpConnection $connection_to_baidu, $code, $msg)
    {
        echo "त्रुटि कोड:$code msg:$msg\n";
    };
    $connection_to_baidu->connect();
};

// वर्कर चलाएँ
Worker::runAll();

उदाहरण 2, असिंक्रोनस एक्सेस बाहरी websocket सेवा, और यह सेट करें कि कौन सा स्थानीय आईपी और पोर्ट का उपयोग करना है

<?php
use Workerman\Worker;
use Workerman\Connection\AsyncTcpConnection;
use Workerman\Connection\TcpConnection;
require_once __DIR__ . '/vendor/autoload.php';

$worker = new Worker();

$worker->onWorkerStart = function($worker) {
    // यदि आप केवल एक प्रक्रिया में कनेक्शन स्थापित करना चाहते हैं, तो आप $worker->id की जांच करके ऐसा कर सकते हैं, उदाहरण के लिए नीचे केवल 0वीं प्रक्रिया में कनेक्शन स्थापित करें
    if ($worker->id != 0) {
        return;
    }
    // दूसरे होस्ट के लिए स्थानीय आईपी और पोर्ट सेट करें (प्रत्येक सॉकेट कनेक्शन एक स्थानीय पोर्ट को आरक्षित करेगा)
    $context_option = array(
        'socket' => array(
            // आईपी स्थानीय नेटवर्क कार्ड का होना चाहिए, और दूसरे होस्ट को पहुंचने में सक्षम होना चाहिए, अन्यथा यह अप्रभावित रहेगा
            'bindto' => '114.215.84.87:2333',
        ),
    );

    $con = new AsyncTcpConnection('ws://echo.websocket.org:80', $context_option);

    $con->onConnect = function(AsyncTcpConnection $con) {
        $con->send('नमस्ते');
    };

    $con->onMessage = function(AsyncTcpConnection $con, $data) {
        echo $data;
    };

    $con->connect();
};

Worker::runAll();

उदाहरण 3, बाहरी wss पोर्ट तक असिंक्रोनस पहुंच, और स्थानीय ssl प्रमाणपत्र सेट करें

<?php
use Workerman\Worker;
use Workerman\Connection\AsyncTcpConnection;
use Workerman\Connection\TcpConnection;
require_once __DIR__ . '/vendor/autoload.php';

$worker = new Worker();

$worker->onWorkerStart = function($worker){
    // दूसरे होस्ट के लिए स्थानीय आईपी और पोर्ट सेट करें और साथ ही ssl प्रमाणपत्र
    $context_option = array(
        'socket' => array(
            // आईपी स्थानीय नेटवर्क कार्ड का होना चाहिए, और दूसरे होस्ट को पहुंचने में सक्षम होना चाहिए, अन्यथा यह अप्रभावित रहेगा
            'bindto' => '114.215.84.87:2333',
        ),
        // ssl विकल्प, संदर्भ के लिए देखें https://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
        )
    );

    // असिंक्रोनस कनेक्शन शुरू करें
    $con = new AsyncTcpConnection('ws://echo.websocket.org:443', $context_option);

    // ssl एन्क्रिप्शन विधि से एक्सेस सेट करें
    $con->transport = 'ssl';

    $con->onConnect = function(AsyncTcpConnection $con) {
        $con->send('नमस्ते');
    };

    $con->onMessage = function(AsyncTcpConnection $con, $data) {
        echo $data;
    };

    $con->connect();
};

Worker::runAll();