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

Workerman UDP和TCP有什么区别

夜涛吖_3466

夜涛吖_3466

发布时间:2026-09-04 10:15:25

|

195人浏览过

|

来源于php中文网

原创

Workerman中UDP与TCP的根本区别在于协议语义:UDP无连接、不维护连接状态、需显式传地址发包且无重传,TCP面向连接、自动管理生命周期、支持直接send但需处理粘包。

workerman udp和tcp有什么区别

Workerman 中 UDP 和 TCP 的根本区别不在框架层,而在协议语义和底层 socket 行为——你用的是 udp:// 还是 tcp://,决定了整个通信模型。

UDP 服务无法维持长连接状态

UDP 是无连接的,Worker 启动后监听一个端口,但不会为每个客户端维护连接对象。收到数据时,onMessage 回调里的 $connection 实际是一个轻量级的 UdpConnection 实例,它只保存了客户端的 ipport,不带生命周期管理(没有 onConnect/onClose)。这意味着:

  • 你不能在 onMessage 外部缓存 $connection 并期望它长期有效
  • 主动发包必须显式传入目标地址:$connection->send($data, $client_ip, $client_port)
  • 若客户端位于 NAT 后,5 分钟无交互,Linux 内核可能丢弃该五元组会话,导致后续发包失败(使用 stream_socket 时更明显)

TCP 服务天然支持连接生命周期管理

TCP 是面向连接的,Workerman 会为每个新连接创建一个持久的 TcpConnection 对象,并触发 onConnect;断开时触发 onClose。这个连接对象可被安全地存入全局数组或 Channel,用于后续广播或定向推送:

  • $connection->send() 不需要额外参数,直接复用已建立的 socket 句柄
  • 连接对象自带心跳、超时、缓冲区控制等能力(如 $connection->close()$connection->isClosed()
  • 粘包问题必须处理:TCP 是字节流,onMessage 收到的数据可能是半包、整包或粘连的多包,需靠协议解析(如自定义 decode)切分

UDP 发送必须“记住”客户端地址,TCP 不用

这是最常踩的坑:UDP 服务端首次收到客户端数据后,必须立刻把 $connection->getRemoteIp()$connection->getRemotePort() 记下来,否则下次想回包就找不到目标。而 TCP 的 $connection 本身已绑定远端地址,随时可发。

  • UDP 示例片段:
    $worker->onMessage = function ($connection, $data) {
        $client_ip = $connection->getRemoteIp();
        $client_port = $connection->getRemotePort();
        // 必须显式传入地址才能发回去
        $connection->send("ack", $client_ip, $client_port);
    };
  • TCP 示例片段:
    $worker->onMessage = function ($connection, $data) {
        // 直接 send,无需地址参数
        $connection->send("ack");
    };
  • UDP 若忘记存地址,又没做心跳保活,60 秒后发包大概率静默失败(无错误提示,包直接被内核丢弃)

UDP 没有重传/拥塞控制,TCP 有但需注意阻塞风险

UDP 的“快”是双刃剑:它不保证送达,也不排队、不重试、不控速。适合音视频、SIP、GB28181 这类容忍丢包但忌延迟的场景。TCP 虽可靠,但在 Workerman 中要注意:

  • 单个 TcpConnectionsend() 是异步写入缓冲区,但如果对方接收慢或网络卡顿,缓冲区满后会阻塞整个事件循环(尤其在未启用 buffer_size 限流时)
  • UDP 的 send() 几乎总是立即返回(除非系统发送缓冲区爆满),但不等于对方收到了
  • UDP 无法感知丢包,调试时得靠抓包(tcpdump -i any udp port 5060)或应用层 ACK 机制

真正容易被忽略的是:UDP 的“无状态”不是便利,而是责任转移——你得自己实现地址记忆、心跳保活、应用层确认、乱序容忍。TCP 把这些扛在协议栈里,但换来了粘包、缓冲区管理和连接可靠性开销。选哪个,取决于你的业务能不能接受“发了但不知道到了没”,以及愿不愿意为“到了但可能乱序/重复”写解析逻辑。

热门AI工具

更多
DeepSeek

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

豆包大模型

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

切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

Loomy
Loomy Hot

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

UpDream
UpDream Hot

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

WorkBuddy

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

VibeKnow
VibeKnow Hot

一款AI视频创作工具,主要用于全球首个AI知识视频创作平台,文档、文章、网页,一键生成视频,适合需要提升相关任务效率的用户。

二狗PPT
二狗PPT Hot

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

Atoms
Atoms Hot

Atoms是一款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高并发开发内容。

162

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