void Connection::close(mixed $data = '')
Đóng kết nối một cách an toàn và kích hoạt callback onClose của kết nối.
Mặc dù UDP là giao thức không kết nối, nhưng đối tượng AsyncUdpConnection tương ứng vẫn được giữ trong bộ nhớ. Bạn phải gọi phương thức close để giải phóng đối tượng kết nối UDP tương ứng, nếu không, đối tượng kết nối UDP này sẽ vẫn tồn tại trong bộ nhớ, gây ra rò rỉ bộ nhớ.
Tham số
$data
Tham số tùy chọn, dữ liệu cần gửi (nếu có chỉ định giao thức, sẽ tự động gọi phương thức encode của giao thức để đóng gói dữ liệu $data), khi dữ liệu đã được gửi xong, kết nối sẽ được đóng và sau đó sẽ kích hoạt callback onClose.
Kích thước dữ liệu không được vượt quá 65507 byte, nếu không sẽ gửi thất bại.
Ví dụ
use Workerman\Worker;
use Workerman\Timer;
use Workerman\Connection\AsyncUdpConnection;
use Workerman\Connection\UdpConnection;
require_once __DIR__ . '/vendor/autoload.php';
$worker = new Worker('udp://0.0.0.0:1234');
$worker->onWorkerStart = function(){
// Khởi động một client udp sau 1 giây, kết nối cổng 1234 và gửi chuỗi hi
Timer::add(1, function(){
$udp_connection = new AsyncUdpConnection('udp://127.0.0.1:1234');
$udp_connection->onConnect = function(AsyncUdpConnection $udp_connection){
$udp_connection->send('hi');
};
$udp_connection->onMessage = function(AsyncUdpConnection $udp_connection, $data){
// Nhận dữ liệu hello từ server
echo "recv $data\r\n";
// Đóng kết nối
$udp_connection->close();
};
$udp_connection->connect();
}, null, false);
};
$worker->onMessage = function(UdpConnection $connection, $data)
{
// Nhận dữ liệu từ client AsyncUdpConnection, trả về chuỗi hello
$connection->send("hello");
};
Worker::runAll();
Chạy lệnh trên sẽ in ra tương tự:
recv hello