信息发布→ 登录 注册 退出

Swoole的onPacket事件是用于TCP还是UDP

发布时间:2025-10-10

点击量:
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();

TCP 使用的是 onReceive 事件

对于 TCP 协议,Swoole 使用 onReceive 事件来接收数据。TCP 是面向连接的,每个客户端连接都有唯一的 fd,服务器通过 fd 与客户端通信。 onPacket 不会在 TCP 连接中触发。如果你监听的是 TCP 端口,即使发送了数据,也不会进入 onPacket 回调。 基本上就这些,记住:UDP 用 onPacket,TCP 用 onReceive。
标签:# 回调函数  # 端口  # swoole  # 对象  # 事件  # udp  # 的是  # 客户端  # 回调  # 数据包  # 就会  # 如果你  # 都有  # 会在  # 只在  # 特有的  
在线客服
服务热线

服务热线

4008888355

微信咨询
二维码
返回顶部
×二维码

截屏,微信识别二维码

打开微信

微信号已复制,请打开微信添加咨询详情!