讲师中心 微信公众号
AI工具推荐 视频效率加速

Workerman UDP send方法怎么用

落雪君_6597

落雪君_6597

发布时间:2026-09-01 14:11:00

|

516人浏览过

|

来源于php中文网

原创

Workerman中UDP的send()必须显式传入IP和端口,$connection->send($data, $ip, $port)是唯一安全用法;onMessage中可通过getRemoteIp()/getRemotePort()获取来源地址用于回包;$worker->connections不可靠,广播需自行维护地址列表。

workerman udp send方法怎么用

send() 在 Workerman 的 UDP 场景下,不是连接对象的方法,而是 UdpConnection 实例的直接方法 —— 但它只对「已知目标地址」的连接有效;UDP 本身无连接,所以这个“连接”其实是 Workerman 封装的一次性通信上下文,send() 发送时必须携带目标 IP 和端口。

UDP send() 必须传入完整地址信息

Workerman 的 UdpConnection 对象不维护远端地址(不像 TCP 那样有固定 peer),每次调用 send() 都需显式指定目标地址。否则会报错:Warning: socket_sendto(): unable to write to socket 或静默失败。

  • $connection->send($data, $ip, $port) 是唯一安全用法,$ip$port 缺一不可
  • 不能写成 $connection->send($data) —— 这在 UDP Worker 中无效,也不会抛异常,但数据根本发不出去
  • 如果想复用地址,建议把 $ip$port 存在 $connection->address 或自定义属性里,比如 $connection->target = ['192.168.1.100', 8080]

onMessage 回调里的 $connection 已带来源地址

当客户端发来 UDP 包,onMessage 触发时,$connection 对象已隐含来源信息,可通过 $connection->getRemoteIp()$connection->getRemotePort() 获取。这是你做「回包」或「单播响应」的依据。

  • 常见误操作:直接 $connection->send($response) → 不会发出去
  • 正确做法:$connection->send($response, $connection->getRemoteIp(), $connection->getRemotePort())
  • 注意:getRemoteIp() 在多进程 + NAT 环境下可能返回内网地址(如 127.0.0.1),需结合业务场景判断是否可信

广播给多个客户端要自己遍历 connections

UDP 没有原生广播机制(不像 TCP 可以 foreach 所有 $worker->connections 然后 send()),因为每个 UdpConnection 不代表一个长连接,而是一个临时通信句柄。Workerman 的 $worker->connections 在 UDP 模式下仅记录当前活跃的「最近通信过的客户端地址」,且默认 60 秒无活动自动清理。

  • 若需群发,必须自己维护一个地址列表(如 Redis Set 或 PHP 数组),在 onMessage 中存入 [$ip, $port]
  • 发送时循环该列表,逐个调用 $connection->send($data, $ip, $port)
  • 不要依赖 $worker->connections 做广播 —— 它不稳定,尤其在高并发或心跳间隔长时,容易漏掉客户端

send() 失败不抛异常,但可检查返回值

send() 返回 int 类型:成功时返回发送字节数,失败返回 false。PHP 的 UDP socket 层本身不保证送达,所以失败通常意味着系统缓冲区满、目标不可达或权限问题(如非 root 进程绑定低端口)。

  • 建议加简单判断:if ($connection->send($data, $ip, $port) === false) { error_log("UDP send failed to $ip:$port"); }
  • 不推荐重试 —— UDP 重发违背协议语义,且可能加剧网络拥塞;应由上层协议(如自定义 ACK)处理可靠性
  • 若频繁失败,优先查 netstat -su 看 UDP 接收错误,或用 ss -uln 确认端口监听状态

真正容易被忽略的是:UDP 的 send() 行为完全取决于内核 socket 状态和路由表,Workerman 不做地址解析、不缓存 DNS、也不重试 —— 它只是把数据交出去。所以线上出问题时,先确认目标地址是否可达,再看 PHP 层逻辑。

热门AI工具

更多
豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

AionClaw
AionClaw Hot

AionClaw是一款面向办公、创作和编程任务的AI桌面智能体。

墨刀AI
墨刀AI Hot

一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

相关专题

更多
tcp和udp的区别
tcp和udp的区别

TCP和UDP的区别,在连接性、可靠性、速度和效率、数据报大小以及适用场景等方面。本专题为大家提供tcp和udp的区别的相关的文章、下载、课程内容,供大家免费下载体验。

423

2023.07.25

udp是什么协议
udp是什么协议

UDP是OSI参考模型中一种无连接的传输层协议。本专题为大家带来udp是什么协议的相关文章,免费提供给大家。

2251

2023.08.08

tcp和udp有什么区别
tcp和udp有什么区别

tcp和udp的区别有:1、udp是无连接的,tcp是面向连接的;2、udp是不可靠传输,tcp是可靠传输;3、udp是面向报文传输,tcp是面向字节流传输。想了解更多tcp相关的内容,可阅读本专题下面的相关文章。

2609

2024.11.14

Workerman安装配置教程
Workerman安装配置教程

Workerman安装配置教程专题提供Workerman安装配置、WebSocket开发、TCP通信、异步编程、高并发服务搭建与PHP实时通信开发教程。

146

2026.05.20

Workerman实时通信与长连接开发教程
Workerman实时通信与长连接开发教程

WWorkerman实时通信与长连接开发教程聚合实时通信、聊天室、长连接、消息推送、AI流式输出等Workerman高并发开发内容。

182

2026.05.20

Workerman异步通信与TCP服务器开发
Workerman异步通信与TCP服务器开发

Workerman异步通信与TCP服务器开发专题整理Workerman异步通信、TCP服务、HTTP服务、WebSocket开发与高并发PHP服务器教程。

127

2026.05.20

NumPy数组创建索引切片与数据选择
NumPy数组创建索引切片与数据选择

本专题整理 NumPy 数组创建、索引、切片与数据选择相关教程,覆盖 np.array、zeros/ones、多维数组形状、基础切片、花式索引、布尔索引、条件筛选、视图与副本等常用场景,帮助读者系统掌握 ndarray 数据构造与高效提取方法。

0

2026.09.21

Aionclaw智能助手介绍
Aionclaw智能助手介绍

本专题汇总了AionClaw(AI龙虾助手)的功能介绍与在线使用入口。AionClaw是杭州趣猿人工智能有限公司推出的桌面级AI智能体,能直接在电脑上读写文件、运行脚本、操作浏览器,自动交付Word、PPT、Excel等成品。

20

2026.09.20

AionClaw AI智能体与电脑自动化任务执行功能使用教程
AionClaw AI智能体与电脑自动化任务执行功能使用教程

AionClaw专题整理AI智能体与电脑自动化相关功能使用教程,涵盖安装部署、AI任务执行、Skills技能、文件处理、浏览器控制、电脑操作、持久记忆、聊天工具连接以及办公、编程和内容创作等功能,帮助用户快速掌握AionClaw的实际使用方法。

0

2026.09.20

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Webman中文手册
Webman中文手册

共0课时 | 0人学习

webman初步使用及后台搭建
webman初步使用及后台搭建

共15课时 | 2.6万人学习

Webman中文手册
Webman中文手册

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn