__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 সমর্থিত প্রোটোকলের মধ্যে রয়েছে tcp, ssl, ws, frame, text

কাস্টম প্রোটোকলও সমর্থন করে, প্রোটোকল কাস্টমাইজ করার জন্য কীভাবে জানুন।

ssl এর জন্য Workerman>=3.3.4 প্রয়োজন এবং openssl এক্সটেনশন ইনস্টল করা আবশ্যক।

বর্তমানে http প্রোটোকল এর জন্য AsyncTcpConnection সমর্থন করে না।

new AsyncTcpConnection('ws://...') এর মাধ্যমে ব্রাউজারের মতো Workerman এর মধ্যে দূরবর্তী ওয়েবসকেট সার্ভারে সংযোগ শুরু করতে পারেন, উদাহরণ দেখুন। তবে new AsyncTcpConnection('websocket://...') এর মাধ্যমে Workerman এর মধ্যে ওয়েবসকেট সংযোগ শুরু করা সম্ভব নয়।

উদাহরণ

উদাহরণ 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\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 দ্বারা judge করতে পারেন, যেমন নিচে শুধুমাত্র 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();