Workerman UDP监听地址怎么写

夏敏小哥_5387

夏敏小哥_5387

2026-09-09

523人浏览

原创

udp监听地址必须显式写为ip:port格式,如'127.0.0.1:2345',不可省略ip写成':2345'或'2345';且必须在$context中指定'transport'=>'udp',否则默认按tcp初始化导致onmessage不触发。

workerman udp监听地址怎么写

UDP监听地址格式必须是 ip:port,不能省略IP

Workerman 的 Worker 构造函数对 UDP 协议要求严格:地址必须显式写出 IP 和端口,比如 '0.0.0.0:2345''127.0.0.1:2345'。写成 ':2345''2345' 会直接报错 Invalid address —— 这是新手最常卡住的地方。

原因在于 Workerman 底层调用 PHP 的 socket_bind(),而 UDP socket 不支持“仅端口”的绑定语法(TCP 的 0.0.0.0:port 可简写为 :port,但 UDP 不行)。

  • '0.0.0.0:2345':监听所有网卡,外部可访问(注意防火墙)
  • '127.0.0.1:2345':仅本地进程通信,更安全
  • '192.168.1.100:2345':只绑定指定内网 IP,适合多网卡服务器
  • 千万别写 ':2345''udp://:2345''2345',全部无效

Worker 实例必须显式指定 $context 并设 transport'udp'

光写对地址还不够。UDP 模式下,Worker 必须通过 $context 明确声明传输协议,否则默认走 TCP,会导致监听成功但收不到包。

正确写法:

$worker = new Worker('udp://0.0.0.0:2345', [
    'transport' => 'udp'
]);

错误写法(看似地址对,实则走 TCP):

QuiverAI
QuiverAI

QuiverAI是一款AI图像与设计工具,AI矢量图形生成工具,输出可编辑的 SVG 代码。

下载
// ❌ 错误:没传 transport,底层仍按 TCP 初始化
$worker = new Worker('udp://0.0.0.0:2345');
  • transport 必须在 $context 数组里传,不能靠协议前缀自动识别
  • udp:// 前缀只是习惯写法,Workerman 并不解析它;真正起作用的是 transport 配置项
  • 如果漏掉 transportonMessage 回调永远不会触发,也没有报错,极难排查

接收数据时 $client_info 不含 port 字段?那是你用了旧版

早期 Workerman(onMessage 回调中,$client_info 只有 remote_ip,没有 remote_port。这导致无法回包——因为 UDP 是无连接的,必须知道对方端口才能 sendto

解决方案只有两个:

  • 升级到 Workerman ≥ 4.0.20(推荐),此时 $client_info['remote_port'] 存在且可用
  • 若无法升级,改用 $worker->send($data, $client_info['remote_ip'].':'.$client_info['remote_port']) 手动拼地址(但需自行处理端口缺失逻辑)

验证方式:打印 var_dump($client_info),看到 remote_port 字段才算正常。

防火墙和 SELinux 会静默丢弃 UDP 包,别只盯着代码

UDP 没有连接建立过程,发包失败或收不到响应,90% 不是代码问题,而是系统层拦截。常见表现:本地 nc -u 127.0.0.1 2345 能通,但局域网其他机器发不通。

  • Linux:iptables -L -n | grep :2345 看是否被 DROP;临时放行:iptables -I INPUT -p udp --dport 2345 -j ACCEPT
  • CentOS/RHEL 8+ 默认启用 firewalld:firewall-cmd --add-port=2345/udp --permanent && firewall-cmd --reload
  • SELinux 开启时,即使端口开放也可能拒绝 UDP 绑定,临时关闭测试:setenforce 0

UDP 的“静默失败”特性决定了:只要外部收不到包,先查系统网络策略,再查代码。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

workerman

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

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

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

2023.07.25

403

5

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

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

2023.08.08

2211

5

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

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

2024.11.14

2549

8

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

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

2026.05.20

126

15

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

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

2026.05.20

162

12

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

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

2026.05.20

127

13

AI视频生成软件推荐
AI视频生成软件推荐

本专题汇总了当前主流的AI视频生成软件推荐与排行榜单,涵盖seko、AniShort、剧云、Lovart、LiblibAI及立刻mv等热门工具。同时整理了各软件在文生视频、图生视频、时长限制、画质表现及免费额度等方面的差异对比,助您快速选对适合创作需求的AI视频生成工具。

2026.09.16

160

9

ai生成视频的工具免费版合集
ai生成视频的工具免费版合集

本专题汇总了当前免费AI生成视频工具的排行榜与推荐清单,涵盖seko、讯飞智作、AniShort及剧云、Lovart等多模型集成平台。同时整理了各工具的免费额度、输出时长、水印政策及适用场景差异,助您快速选择合适工具开启AI视频创作。

2026.09.16

60

10

Pandas时间序列分析与可视化报表
Pandas时间序列分析与可视化报表

本专题整理Pandas日期转换、时间索引、重采样、滚动窗口、时区处理、plot绘图、Styler表格样式和报表输出方法。

2026.09.16

60

23

热门下载

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

精品课程

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

共0课时 | 0人学习

Workerman官方手册
Workerman官方手册

共0课时 | 0人学习

ThinkPHP5.1完全开发手册
ThinkPHP5.1完全开发手册

共0课时 | 0人学习