Swoole中onPacket事件专用于UDP通信,因UDP无连接特性,服务器通过onPacket接收数据并获取客户端IP和端口信息,使用sendto回复;而TCP面向连接,需用onConnect、onReceive和onClose等事件管理,通过fd通信,不触发onPacket。

Swoole的onPacket事件是用于UDP的,不是用于TCP。
onPacket 是 UDP 特有的事件
在 Swoole 中,onPacket 事件只在使用 Swoole\Server 并启用 UDP 或混合协议(如同时监听 TCP 和 UDP)时触发。它专门用于接收和处理 UDP 数据包。 因为 UDP 是无连接的协议,服务器不会维持客户端的连接状态,所以无法像 TCP 那样通过 onConnect、onReceive、onClose 等事件来管理通信流程。取而代之的是,每当收到一个 UDP 数据包时,Swoole 就会触发 onPacket 事件。onPacket 回调函数的参数
onPacket 事件的回调函数原型如下:- $server:当前的 Swoole\Server 对象
- $data:接收到的数据内容
- $clientInfo:客户端信息,包括 ip、port、server_port 等
$server = new Swoole\Server('0.0.0.0', 9501, SWOOLE_PROCESS, SWOOLE_SOCK_UDP);
$server->on('packet', function ($server, $data, $clientInfo) {
echo "来自 {$clientInfo['address']}:{$clientInfo['port']} 的消息: $data\n";
// 向客户端发送响应
$server->sendto($clientInfo['address'], $clientInfo['port'], "已收到");
});
$server->start();










