UDP 服務
UDP
為應用程序提供了一種無需建立連接就可以發送封裝的 IP
數據包的方法。
在 EasySwoole
中使用 UDP
服務有2種方法:
主服務
可以將 UDP
服務作為 EasySwoole
的主服務
首先修改配置文件中 MAIN_SERVER.SERVER_TYPE
配置項為 EASYSWOOLE_SERVER
,SOCK_TYPE
配置項修改為 SWOOLE_UDP
。
然后在 EasySwooleEvent
的 mainServerCreate 事件中注冊回調,注冊參考示例如下:
<?php
namespace EasySwoole\EasySwoole;
use EasySwoole\EasySwoole\AbstractInterface\Event;
use EasySwoole\EasySwoole\Swoole\EventRegister;
use Swoole\Server as SwooleServer;
class EasySwooleEvent implements Event
{
// ...
public static function mainServerCreate(EventRegister $register)
{
// ...
$server = ServerManager::getInstance()->getSwooleServer();
$subPort = $server->addlistener('0.0.0.0', 9502, SWOOLE_UDP);
$subPort->on($register::onPacket, function (SwooleServer $server, string $data, array $clientInfo) {
$server->sendto($clientInfo['address'], $clientInfo['port'], 'Server: ' . $data);
});
}
}
子服務
可以將 UDP
服務作為 EasySwoole 的子服務。顧名思義:另外開一個端口進行 UDP
監聽。
在 EasySwooleEvent
中 mainServerCreate 事件,進行子服務監聽,參考代碼如下:
public static function mainServerCreate(\EasySwoole\EasySwoole\Swoole\EventRegister $register)
{
$server = \EasySwoole\EasySwoole\ServerManager::getInstance()->getSwooleServer();
$subPort = $server->addlistener('0.0.0.0', 9503, SWOOLE_UDP);
$subPort->on($register::onPacket, function (\Swoole\Server $server, string $data, array $clientInfo) {
$server->sendto($clientInfo['address'], $clientInfo['port'], 'Server:' . $data);
});
}