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

Workerman UDP怎么和TCP服务同时运行

老磊姑娘_7048

老磊姑娘_7048

发布时间:2026-09-03 09:00:29

|

877人浏览过

|

来源于php中文网

原创

Workerman的UDP和TCP服务必须分属不同Worker实例且不可混用协议,否则触发Address already in use错误或UDP收不到数据;多进程UDP需用stream_socket模式,客户端地址需手动缓存用于主动回包,跨协议通信须依赖Redis等外部存储。

workerman udp怎么和tcp服务同时运行

Workerman 的 UDP 和 TCP 服务可以同时运行,但必须分属不同 Worker 实例,且不能共用同一个端口或协议栈监听方式。 否则会触发 Address already in use 错误,或者 UDP 收不到数据(尤其在多进程下)。

UDP 和 TCP 必须用独立的 Worker 实例

Workerman 不允许单个 Worker 实例混用协议。TCP 监听用 "tcp://0.0.0.0:8080",UDP 就得另起一个 Worker,比如 "udp://0.0.0.0:8081"。

  • 错误写法:$worker = new Worker("tcp://0.0.0.0:8080"); $worker->transport = 'udp'; —— 无效,transport 属性只对 GatewayWorker 生效,原生 Worker 不识别
  • 正确写法:两个变量、两个 new Worker(),各自绑定协议和端口
  • 注意:TCP 和 UDP 即使端口号相同(如都用 8080),Linux 也视为不同套接字,但不建议这么做——容易引发运维混淆和防火墙策略冲突

UDP 多进程下必须用 stream_socket 模式

Workerman 在 UDP 场景中,count > 1 时默认使用 stream_socket_server 创建 socket;而 count === 1 时可能回退到 socket_create。前者支持多进程复用同一端口(通过内核 SO_REUSEPORT),后者不支持,会导致子进程启动失败或仅第一个进程收包。

  • 显式启用多进程 UDP:设置 $udp_worker->count = 4;,无需额外操作,Workerman 自动选 stream_socket
  • 若发现只有 master 进程收到 UDP 包,检查是否误设 count = 1 或手动调用了底层 socket_* 函数干扰了初始化
  • UDP 没有连接状态,$connection 对象的 $connection->remoteAddress 和 $connection->remotePort 是唯一标识客户端的依据,务必在 onMessage 中读取并缓存(如需后续主动回包)

共享数据需绕过进程隔离

TCP 和 UDP 的 Worker 是完全独立的进程组,彼此内存不共享。如果想让 TCP 服务触发 UDP 广播,或把 UDP 收到的设备心跳同步给 TCP 在线列表,不能直接传变量。

  • 推荐用 Workerman\Lib\Timer + 全局静态数组仅适用于单进程调试,上线必崩
  • 生产环境必须走外部媒介:Redis(用 phpredis 扩展)、SQLite(轻量级 IPC)、或 Workerman\Channel(需额外启动 Channel Server)
  • 避免用文件轮询或 MySQL 表锁做协调——UDP 高频场景下 I/O 成为瓶颈,且事务延迟不可控
  • 特别注意:UDP 客户端地址是“无状态”的,sendto() 必须每次指定目标地址,不能像 TCP 那样靠 $connection->send() 简单调用

端口占用和防火墙要分开配

系统层面,TCP 和 UDP 端口是分开管理的。开了 firewall-cmd --add-port=8080/tcp,不代表 8080/udp 也通。

  • 检查是否真在监听:ss -tuln | grep ':8080' —— 你会看到两行,一行 tcp,一行 udp
  • Docker 用户注意:-p 8080:8080 默认只映射 TCP,UDP 需显式写 -p 8080:8080/udp
  • 云服务器安全组(如阿里云、腾讯云)必须分别放行 TCP 和 UDP 对应端口,缺一不可

最容易被忽略的是:UDP 没有三次握手,也没有连接保活机制,客户端发一个包后若长时间无交互,中间 NAT 设备可能直接丢弃映射表项。所以哪怕只是做设备注册,也得在 UDP 服务里加心跳逻辑——不是可选项,是上线前提。

相关文章

相关标签:

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

热门AI工具

更多
豆包大模型

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

Lovart
Lovart Hot

一款面向视觉设计创作的AI设计平台,可通过智能体和画布工作流辅助制作海报、Logo、网页、PPT及其他视觉内容。

DeepSeek

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

讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

讯飞智文

一款面向学习和办公场景的AI文档创作工具,可辅助生成PPT与Word文档,提高资料整理和内容制作效率。

小橡皮AI

一款AI工具,主要用于小橡皮一键去AI味,将机器味重的内容改得更有活人感,防止因为 AI 内容被平台打上 AI 标签,以及限流,适合需要提升相关任务效率的用户。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

PixTV
PixTV Hot

PixTV是一款面向AIGC内容创作的AI视频生成工具。

WorkBuddy

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

相关专题

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

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

563

2023.07.25

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

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

3311

2023.08.08

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

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

3949

2024.11.14

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

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

226

2026.05.20

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

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

222

2026.05.20

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

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

227

2026.05.20

Postman身份认证怎么配置
Postman身份认证怎么配置

本专题从实际API接口调试场景出发,讲解Postman身份认证的完整配置流程,包括常见认证协议介绍、授权参数设置、访问令牌填写、OAuth 2.0授权及认证失败排查,帮助用户正确完成接口授权与访问验证。

0

2026.11.06

Postman请求头Headers怎么设置
Postman请求头Headers怎么设置

围绕Postman HTTP请求头配置展开,讲解Headers选项的具体使用方式,包括Key和Value参数填写、请求头信息添加、常见Header字段设置及请求头修改方法,帮助用户解决接口调试过程中遇到的请求头配置问题。

0

2026.11.06

Postman接口请求发送教程
Postman接口请求发送教程

详细介绍Postman接口请求的创建与发送方法,涵盖GET和POST请求、URL配置、请求参数、Headers请求头、Body请求体设置以及响应结果查看,帮助用户掌握Postman接口请求的完整操作流程。

0

2026.11.06

热门下载

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

精品课程

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

共0课时 | 0人学习

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

共15课时 | 2.7万人学习

Webman中文手册
Webman中文手册

共0课时 | 0人学习

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

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