__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_create、 socket bağlam seçenekleri、 SSL bağlam seçenekleri
Dikkat
Şu anda AsyncTcpConnection tarafından desteklenen protokoller şunlardır: tcp、 ssl、 ws、 frame、 text。
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();