__construct yöntemi

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

Asenkron bir bağlantı nesnesi oluşturur.

AsyncTcpConnection, Workerman'ın istemci olarak uzaktaki sunucuya asenkron bağlantı başlatmasını sağlar ve send arayüzü ile onMessage geri çağırması aracılığıyla bağlantı üzerindeki verileri asenkron olarak gönderir ve işler.

Parametreler

Parametre: remote_address

Bağlantı adresi, örneğin
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

Parametre: $context_option

Bu parametre workerman >= 3.3.5 gerektirir

Socket bağlamını ayarlamak için kullanılır, örneğin bindto kullanarak hangi (ağ kartı) IP ve portu dış ağa erişim için ayarlamak, ssl sertifikası gibi ayarlar yapmak.

Referans stream_context_createsocket bağlam seçenekleriSSL bağlam seçenekleri

Dikkat

Şu anda AsyncTcpConnection tarafından desteklenen protokoller şunlardır: tcpsslwsframetext

Aynı zamanda özelleştirilmiş protokolleri destekler, Protokol özelleştirme kısmına bakınız.

ssl için Workerman >= 3.3.4 gerekmekte ve openssl uzantısı yüklenmiş olmalıdır.

Mevcutta http protokolü için AsyncTcpConnection desteklenmemektedir.

new AsyncTcpConnection('ws://...') kullanarak tarayıcı gibi Workerman içinde uzaktaki websocket sunucusuna websocket bağlantısı başlatabilirsiniz, örnek kısmına bakınız. Ancak new AsyncTcpConnection('websocket://...') biçiminde Workerman içinde websocket bağlantısı başlatamazsınız.

Örnek

Örnek 1, dış http hizmetine asenkron erişim

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

$task = new Worker();
// İşlem başlatıldığında www.baidu.com'a asenkron bir bağlantı nesnesi oluşturun ve veri göndererek veri alın
$task->onWorkerStart = function($task)
{
    // http'yi doğrudan belirlemek desteklenmiyor, fakat tcp ile http protokolünü taklit edip veri gönderebilirsiniz
    $connection_to_baidu = new AsyncTcpConnection('tcp://www.baidu.com:80');
    // Bağlantı başarılı bir şekilde kurulduğunda, http istek verisini gönderin
    $connection_to_baidu->onConnect = function(AsyncTcpConnection $connection_to_baidu)
    {
        echo "bağlantı başarılı\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 "bağlantı kapatıldı\n";
    };
    $connection_to_baidu->onError = function(AsyncTcpConnection $connection_to_baidu, $code, $msg)
    {
        echo "Hata kodu:$code msg:$msg\n";
    };
    $connection_to_baidu->connect();
};

// Worker'ı çalıştır
Worker::runAll();

Örnek 2, dış websocket hizmetine asenkron erişim ve hangi yerel IP ve port ile erişimin ayarlanması

<?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) {
    // Sadece bir süreçte bağlantı başlatmak istiyorsanız, $worker->id ile kontrol edebilirsiniz, örneğin aşağıda sadece 0 numaralı süreçte bağlantı başlatılmıştır
    if ($worker->id != 0) {
        return;
    }
    // Karşıdaki ana bilgisayara hangi yerel IP ve portla erişileceğini ayarlayın (her socket bağlantısı bir yerel port kullanır)
    $context_option = array(
        'socket' => array(
            // IP, yerel ağ kartının IP'si olmalı ve karşıdaki ana bilgisayara erişim sağlamalıdır, aksi takdirde geçersiz olur
            'bindto' => '114.215.84.87:2333',
        ),
    );

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

    $con->onConnect = function(AsyncTcpConnection $con) {
        $con->send('merhaba');
    };

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

    $con->connect();
};

Worker::runAll();

Örnek 3, dış wss portuna asenkron erişim ve yerel ssl sertifikası ayarlama

<?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){
    // Karşıdaki ana bilgisayara erişirken hangi yerel IP ve port ile ve ssl sertifikasını ayarlayın
    $context_option = array(
        'socket' => array(
            // IP, yerel ağ kartının IP'si olmalı ve karşıdaki ana bilgisayara erişim sağlamalıdır, aksi takdirde geçersiz olur
            'bindto' => '114.215.84.87:2333',
        ),
        // ssl seçenekleri, https://php.net/manual/zh/context.ssl.php adresini referans alarak
        'ssl' => array(
            // Yerel sertifika yolu. PEM formatında olmalı ve yerel sertifika ile özel anahtarı içermelidir.
            'local_cert'        => '/your/path/to/pemfile',
            // local_cert dosyasının şifresi.
            'passphrase'        => 'your_pem_passphrase',
            // Kendi imzaladıkları sertifikalara izin verilip verilmeyeceği.
            'allow_self_signed' => true,
            // SSL sertifikasının doğrulanıp doğrulanmayacağı.
            'verify_peer'       => false
        )
    );

    // Asenkron bağlantı başlat
    $con = new AsyncTcpConnection('ws://echo.websocket.org:443', $context_option);

    // SSL şifreleme yöntemi ile erişimi ayarlayın
    $con->transport = 'ssl';

    $con->onConnect = function(AsyncTcpConnection $con) {
        $con->send('merhaba');
    };

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

    $con->connect();
};

Worker::runAll();