Phương thức __construct
void AsyncTcpConnection::__construct(string $remote_address, $context_option = null)
Tạo một đối tượng kết nối không đồng bộ.
AsyncTcpConnection cho phép Workerman hoạt động như một client gửi yêu cầu kết nối không đồng bộ đến máy chủ từ xa, và gửi và xử lý dữ liệu kết nối không đồng bộ thông qua giao diện gửi và gọi lại onMessage.
Tham số
Tham số: remote_address
Địa chỉ kết nối, ví dụ
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
Tham số: $context_option
Tham số yêu cầu (workerman >= 3.3.5)
Dùng để cài đặt ngữ cảnh socket, ví dụ sử dụng bindto
để thiết lập IP và cổng (card mạng) nào để truy cập mạng bên ngoài, thiết lập chứng chỉ SSL, v.v.
Tham khảo stream_context_create, Tùy chọn ngữ cảnh socket,Tùy chọn ngữ cảnh SSL
Lưu ý
Hiện tại, AsyncTcpConnection hỗ trợ các giao thức tcp,ssl,ws,frame,text.
Ngoài ra còn hỗ trợ tùy chỉnh giao thức, xem Làm thế nào để tùy chỉnh giao thức
Trong đó, ssl yêu cầu Workerman>=3.3.4, và cài đặt openssl mở rộng.
Hiện tại không hỗ trợ AsyncTcpConnection của giao thức http.
Có thể sử dụng new AsyncTcpConnection('ws://...')
giống như trình duyệt để tạo kết nối websocket từ xa đến máy chủ websocket từ xa trong workerman, xem Ví dụ. Tuy nhiên, không thể sử dụng new AsyncTcpConnection('websocket://...')
để tạo kết nối websocket trong workerman.
Ví dụ
Ví dụ 1: Gửi yêu cầu kết nối không đồng bộ đến dịch vụ http bên ngoài
use Workerman\Worker;
use Workerman\Connection\AsyncTcpConnection;
use Workerman\Connection\TcpConnection;
require_once __DIR__ . '/vendor/autoload.php';
$task = new Worker();
$task->onWorkerStart = function($task)
{
$connection_to_baidu = new AsyncTcpConnection('tcp://www.baidu.com:80');
$connection_to_baidu->onConnect = function(AsyncTcpConnection $connection_to_baidu)
{
echo "Kết nối thành công\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 "Kết nối đóng\n";
};
$connection_to_baidu->onError = function(AsyncTcpConnection $connection_to_baidu, $code, $msg)
{
echo "Mã lỗi: $code Thông báo: $msg\n";
};
$connection_to_baidu->connect();
};
Worker::runAll();
Ví dụ 2: Gửi yêu cầu kết nối không đồng bộ đến dịch vụ websocket bên ngoài và thiết lập IP và cổng để truy cập
<?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){
$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('hello');
};
$con->onMessage = function(AsyncTcpConnection $con, $data) {
echo $data;
};
$con->connect();
};
Worker::runAll();
Ví dụ 3: Gửi yêu cầu kết nối không đồng bộ đến cổng wss bên ngoài và thiết lập chứng chỉ SSL cục bộ
<?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){
$context_option = array(
'socket' => array(
'bindto' => '114.215.84.87:2333',
),
'ssl' => array(
'local_cert' => '/your/path/to/pemfile',
'passphrase' => 'your_pem_passphrase',
'allow_self_signed' => true,
'verify_peer' => false
)
);
$con = new AsyncTcpConnection('ws://echo.websocket.org:443', $context_option);
$con->transport = 'ssl';
$con->onConnect = function(AsyncTcpConnection $con) {
$con->send('hello');
};
$con->onMessage = function(AsyncTcpConnection $con, $data) {
echo $data;
};
$con->connect();
};
Worker::runAll();