void Connection::close(mixed $data = '')
安全的關(guān)閉連接,并觸發(fā)連接的onClose
回調(diào)。
雖然udp是無連接的,但是對應(yīng)的AsyncUdpConnection對象卻是一直保留在內(nèi)存中,必須調(diào)用close方法才可以釋放掉對應(yīng)的udp連接對象,否則這個udp連接對象會一直存在于內(nèi)存中,造成內(nèi)存泄漏。
參數(shù)
$data
可選參數(shù),要發(fā)送的數(shù)據(jù)(如果有指定協(xié)議,則會自動調(diào)用協(xié)議的encode方法打包$data
數(shù)據(jù)),當(dāng)數(shù)據(jù)發(fā)送完畢后關(guān)閉連接,隨后會觸發(fā)onClose回調(diào)。
數(shù)據(jù)大小不能超過65507字節(jié),否則會發(fā)送失敗。
示例
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(){
// 1秒后啟動一個udp客戶端,連接1234端口并發(fā)送字符串 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){
// 收到服務(wù)端返回的數(shù)據(jù) hello
echo "recv $data\r\n";
// 關(guān)閉連接
$udp_connection->close();
};
$udp_connection->connect();
}, null, false);
};
$worker->onMessage = function(UdpConnection $connection, $data)
{
// 收到AsyncUdpConnection客戶端發(fā)來的數(shù)據(jù),返回字符串 hello
$connection->send("hello");
};
Worker::runAll();
執(zhí)行后打印類似:
recv hello