UDP 服務(wù)
UDP
為應(yīng)用程序提供了一種無需建立連接就可以發(fā)送封裝的 IP
數(shù)據(jù)包的方法。
在 EasySwoole
中使用 UDP
服務(wù)有2種方法:
主服務(wù)
可以將 UDP
服務(wù)作為 EasySwoole
的主服務(wù)
首先修改配置文件中 MAIN_SERVER.SERVER_TYPE
配置項(xiàng)為 EASYSWOOLE_SERVER
,SOCK_TYPE
配置項(xiàng)修改為 SWOOLE_UDP
。
然后在 EasySwooleEvent
的 mainServerCreate 事件中注冊(cè)回調(diào),注冊(cè)參考示例如下:
<?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);
});
}
}
子服務(wù)
可以將 UDP
服務(wù)作為 EasySwoole 的子服務(wù)。顧名思義:另外開一個(gè)端口進(jìn)行 UDP
監(jiān)聽。
在 EasySwooleEvent
中 mainServerCreate 事件,進(jìn)行子服務(wù)監(jiān)聽,參考代碼如下:
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);
});
}