Hyperf TCP/UDP 服务开发指南:从零搭建自定义网络协议服务
后端Web框架微服务RPC框架异步编程【免费下载链接】hyperf A coroutine framework that focuses on hyperspeed and flexibility. Building microservice or middleware with ease.项目地址https://gitcode.com/hyperf/hyperf点击查看免费下载Hyperf 协程框架默认内置了基于 Swoole 的TCP/UDP服务创建能力只需通过config/autoload/server.php中简单的servers配置即可挂载任意自定义协议服务。本文将围绕 Hyperf 官方文档《TCP/UDP Server》展开完整讲解 TCP 与 UDP 服务的类实现、配置写法、客户端联调方式并结合src/server与src/contract组件源码剖析事件注册与多端口监听的真实调用链帮助读者掌握在 Hyperf 中落地自定义长连接服务、私有协议服务或 UDP 数据上报服务的完整实战方案。概述Hyperf 的通用 TCP/UDP 服务能力Hyperf 的服务器体系以 Swoole Server 为核心。默认发布配置 src/server/publish/server.php 中只启用了 HTTP 服务端口 9501但 Hyperf 的servers配置支持同时注册多个监听端口每个端口可独立指定协议类型TCP/UDP、业务回调与运行参数。当配置项type取值为Server::SERVER_BASE即Hyperf\Server\ServerInterface::SERVER_BASE 3见 ServerInterface.php时框架会创建一个纯粹的Swoole\Server实例不附带 HTTP/WebSocket 协议解析交由开发者自定义onReceive、onPacket等回调来处理原始字节流。借助这一能力开发者可以轻松实现 IM 长连接网关、自定义二进制协议服务、游戏服务端、UDP 日志采集端点等场景且全程运行在 Swoole 协程环境中具备异步非阻塞与高并发处理能力。使用 TCP 服务第一步创建 TcpServer 处理类新建一个类并实现Hyperf\Contract\OnReceiveInterface接口。该接口要求实现onReceive($server, int $fd, int $reactorId, string $data): void方法其中$fd为客户端连接的文件描述符$data为接收到的原始数据。接口定义位于 OnReceiveInterface.php其$server参数可以是 Swoole Server、协程连接或 Swow Socket 等类型由运行引擎决定。?php declare(strict_types1); namespace App\Controller; use Hyperf\Contract\OnReceiveInterface; class TcpServer implements OnReceiveInterface { public function onReceive($server, int $fd, int $reactorId, string $data): void { $server-send($fd, recv: . $data); } }业务回调的核心就是拿到$server句柄后通过$server-send($fd, ...)向指定连接回写数据。上述示例实现了接收一行数据后原样回显并加recv:前缀的简单回显逻辑。第二步编写对应的 servers 配置在项目配置文件config/autoload/server.php的servers数组中新增一个端口配置项?php declare(strict_types1); use Hyperf\Server\Server; use Hyperf\Server\Event; return [ // 无关配置项已省略 servers [ [ name tcp, // 服务名可通过 ServerManager 获取 type Server::SERVER_BASE, // 服务类型纯 TCP/UDP 基础服务 host 0.0.0.0, // 监听地址 port 9504, // 监听端口 sock_type SWOOLE_SOCK_TCP, // 套接字类型TCP callbacks [ Event::ON_RECEIVE [App\Controller\TcpServer::class, onReceive], ], settings [ // 按需配置如 worker_num、open_tcp_nodelay 等 ], ], ], ];配置要点说明name当前端口服务的标识名之后可通过Hyperf\Server\ServerManager按名获取该服务的 Swoole Server 实例与端口对象type使用Server::SERVER_BASE对应 ServerInterface.php 中定义的常量值3。1为 HTTP、2为 WebSocket只有SERVER_BASE会创建原生Swoole\Server见 Server.php 的makeServer()方法sock_type直接使用 Swoole 全局常量TCP 为SWOOLE_SOCK_TCPcallbacks将Event::ON_RECEIVE字符串receive映射到业务类的onReceive方法。框架会从容器中解析该类并注册为 Swoole 事件回调见 Server.php 的registerSwooleEvents()其中对实现了MiddlewareInitializerInterface的类还会初始化核心中间件settings端口级运行参数会与顶层settings合并端口级优先见 Server.php 与 Server.php 的array_replace合并逻辑。此外针对SERVER_BASE类型Port.php 的filter()方法会自动合并open_http2_protocol false与open_http_protocol false确保纯 TCP 端口不会意外启用 HTTP 协议解析开发者无需手动设置这两项。第三步编写客户端验证连通性使用 Swoole 自带的同步客户端Swoole\Client即可快速验证?php $client new \Swoole\Client(SWOOLE_SOCK_TCP); $client-connect(127.0.0.1, 9504); $client-send(Hello World.); $ret $client-recv(); // recv:Hello World.send()发送数据后服务端onReceive被触发并回写recv:Hello World.客户端recv()收到的即为该回显内容。实际生产环境中也可以在 Hyperf 项目内基于Hyperf\Utils\Coroutine以协程方式编写异步客户端或在其他语言中直接使用原生 Socket 连接该端口。使用 UDP 服务Docker 环境下的 UDP 端口映射注意事项Docker 默认使用 TCP 协议进行端口通信。如果需要使用 UDP 协议必须显式配置 Docker 网络的 UDP 端口映射。docker run -p 9502:9502/udp image-name/udp后缀是 Docker 映射 UDP 端口的关键写法缺少该后缀时容器内 UDP 端口将无法从宿主机访问。同理若服务端同时监听 TCP 与 UDP需要分别做映射。第一步创建 UdpServer 处理类实现Hyperf\Contract\OnPacketInterface接口其方法签名为onPacket($server, $data, $clientInfo): void定义见 OnPacketInterface.php。$clientInfo为数组包含客户端地址address、端口port及server_socket等信息。?php declare(strict_types1); namespace App\Controller; use Hyperf\Contract\OnPacketInterface; class UdpServer implements OnPacketInterface { public function onPacket($server, $data, $clientInfo): void { var_dump($clientInfo); $server-sendto($clientInfo[address], $clientInfo[port], Server . $data); } }onPacket中通过$server-sendto($clientInfo[address], $clientInfo[port], ...)向来源地址回发 UDP 数据报实现收到什么回什么的 UDP 回显逻辑var_dump($clientInfo)可直观查看客户端来源信息。如果当前环境不存在OnPacketInterface接口文件可以不实现该接口。只要配置文件正确运行结果与实现接口时完全一致——框架在注册回调时只按配置中的[类名, 方法名]解析调用并不强制校验接口继承关系见 Server.php 的回调解析逻辑。第二步编写对应的 servers 配置与 TCP 配置结构一致仅将sock_type改为SWOOLE_SOCK_UDP并将回调事件替换为Event::ON_PACKET?php declare(strict_types1); use Hyperf\Server\Server; use Hyperf\Server\Event; return [ // 无关配置项已省略 servers [ [ name udp, type Server::SERVER_BASE, host 0.0.0.0, port 9505, sock_type SWOOLE_SOCK_UDP, callbacks [ Event::ON_PACKET [App\Controller\UdpServer::class, onPacket], ], settings [ // 按需配置 ], ], ], ];UDP 无连接状态因此不涉及连接建立/关闭事件核心回调只有Event::ON_PACKET。客户端可使用Swoole\Client(SWOOLE_SOCK_UDP)或socket_sendto()等方式发送数据报进行验证。事件总览TCP/UDP 服务可监听的 Swoole 事件Hyperf 通过 Event.php 将 Swoole 事件统一封装为类常量配置callbacks时直接引用即可。与 TCP/UDP 基础服务最相关的四个事件如下Event 常量实际值描述Event::ON_CONNECTconnect监听 TCP 连接建立事件UDP 无此事件Event::ON_RECEIVEreceive监听 TCP 数据接收事件对应onReceive回调Event::ON_CLOSEclose监听 TCP 连接关闭事件Event::ON_PACKETpacketUDP 数据接收事件对应onPacket回调除上述事件外Event类还定义了ON_START、ON_WORKER_START、ON_WORKER_STOP、ON_PIPE_MESSAGE、ON_TASK、ON_FINISH等进程生命周期与任务事件见 Event.php同样可用于 TCP/UDP 服务的callbacks配置例如在ON_CONNECT中记录连接日志、在ON_CLOSE中做资源清理。源码剖析Hyperf 如何启动多端口 TCP/UDP 服务理解底层实现有助于排查端口冲突、事件不触发等问题。核心流程位于 Server.php 的initServers()配置解析ServerConfig构造器见 ServerConfig.php校验servers非空并将每个配置项通过Port::build()见 Port.php转换为Port值对象字段缺省时使用默认值namehttp、type1、host0.0.0.0、port9501端口排序sortServers()Server.php将 WebSocket 端口优先、HTTP 端口次之排列其余SERVER_BASE类型端口排在最后首个端口创建主 Server遍历servers第一个端口通过makeServer()创建真正的 Swoole Server 实例——SERVER_BASE对应new SwooleServer($host, $port, $mode, $sockType)Server.php并把顶层callbacks与端口级callbacks合并后注册全部 Swoole 事件后续端口追加监听从第二个端口起通过$this-server-addlistener($host, $port, $sockType)在当前 Swoole Server 上追加监听端口Server.php每个端口拥有独立的callbacks与settings并各自注册到ServerManager。这意味着一个 Hyperf 进程可同时提供 HTTP9501、TCP9504、UDP9505等多个服务它们共享同一套进程管理、协程调度与配置体系。若使用Hyperf\Server\CoroutineServer协程服务器模式CoroutineServer.php 同样支持SERVER_BASE类型此时每个连接运行在独立协程中。常见配置补充与运行前提顶层settings与端口settings全局参数如worker_num、enable_coroutine、pid_file等写在顶层settings参考默认模板 src/server/publish/server.php端口级settings可覆盖同名项按array_replace语义合并监听多端口时的名称区分ServerManager::add($name, [$type, $port])以配置中的name为键Server.php业务代码中可按服务名区分当前请求来自哪个端口运行前提本文示例基于 Swoole 常驻内存运行模式server.php的mode默认使用SWOOLE_BASE见 src/server/publish/server.phpUDP 端口在 Docker 部署时务必使用-p 端口:端口/udp方式映射TCP 长连接场景建议在settings中按需配置open_tcp_nodelay、heartbeat_idle_time等 Swoole 原生参数以优化连接稳定性与实时性。至此从业务类编写、配置注册到客户端联调再到事件模型与底层启动原理读者已具备在 Hyperf 中独立搭建 TCP/UDP 自定义协议服务的完整能力可在此基础上扩展为私有协议解析、长连接网关或 UDP 数据采集等生产级服务。赞分享后端Web框架微服务RPC框架异步编程【免费下载链接】hyperf A coroutine framework that focuses on hyperspeed and flexibility. Building microservice or middleware with ease.项目地址https://gitcode.com/hyperf/hyperf点击查看免费下载相关推荐Hyperf 协程框架 TCP/UDP 服务开发实战指南Hyperf 协程框架 TCP/UDP 服务开发实战指南 Hyperf 框架开箱即用地提供了基于 Swoole 的 TCP/UDP 网络服务能力你不需要额外引后端微服务TBOX高并发网络通信实战从零搭建TCP/UDP服务器的完整指南TBOX高并发网络通信实战从零搭建TCP/UDP服务器的完整指南 TBOX是一个类似glib的跨平台C语言库提供了丰富的网络通信功能帮助开发者快速构建高并跨平台并发编程异步编程node-interview网络编程TCP/IP协议与HTTP服务器搭建指南node interview网络编程TCP/IP协议与HTTP服务器搭建指南 你是否在Node.js面试中遇到过网络编程相关的难题是否对TCP/IP协议的底文档教程后端上一篇大数据可视化终极指南Superset与Metabase自助分析平台对比下一篇【亲测免费】 XUnity.AutoTranslator 项目推荐创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

MCP for Beginners 学习指南:一站式导航 Model Context Protocol 初学者课程仓库

MCP for Beginners 学习指南:一站式导航 Model Context Protocol 初学者课程仓库

教程文档人工智能 【免费下载链接】mcp-for-beginners This open-source curriculum introduces the fundamentals of Model Context Protocol (MCP) through real-world, cross-language examples in .NET, Java, TypeScript, JavaScript, Rust and Python. Designed for deve…

2026/10/11 4:34:46 阅读更多 →
Hudi RFC 提案全览与索引指南:从 rfc/README.md 读懂 115+ 项设计提案的演进脉络

Hudi RFC 提案全览与索引指南:从 rfc/README.md 读懂 115+ 项设计提案的演进脉络

数据湖湖仓一体大数据数据存储 【免费下载链接】hudi Upserts, Deletes And Incremental Processing on Big Data. 项目地址: https://gitcode.com/gh_mirrors/hud/hudi 点击查看 免费下载 本文以 Hudi 仓库根目录下的 rfc/README.md 为索引主线,系统讲…

2026/10/11 11:39:39 阅读更多 →
背包 DP 全解:从 01 背包到完全背包,用 LogicStack-LeetCode 刷穿 LeetCode 背包问题

背包 DP 全解:从 01 背包到完全背包,用 LogicStack-LeetCode 刷穿 LeetCode 背包问题

教程文档 【免费下载链接】LogicStack-LeetCode 公众号「宫水三叶的刷题日记」刷穿 LeetCode 系列文章源码 项目地址: https://gitcode.com/gh_mirrors/lo/LogicStack-LeetCode 点击查看 免费下载 导读 背包问题(Knapsack Problem)是动态规…

2026/10/11 4:34:53 阅读更多 →

最新新闻

为什么iwe拒绝规定笔记结构?揭秘文本图管理工具的3条设计原则

为什么iwe拒绝规定笔记结构?揭秘文本图管理工具的3条设计原则

人工智能Agent 记忆MCP 服务CLI知识管理开发工具 【免费下载链接】iwe Markdown knowledge graph — LSP for your editor, CLI MCP memory for your AI agents 项目地址: https://gitcode.com/gh_mirrors/iw/iwe 点击查看 免费下载 🤔 用过不少笔记工…

2026/10/11 13:03:46 阅读更多 →
LeaScript:让私域陪练看得见,留得住,服务得上

LeaScript:让私域陪练看得见,留得住,服务得上

GitHub - ancientcc/LeaScript: LeaScript 是兰栖科技(Leagor)开源的动作脚本规范。它专为端侧离线视觉动作识别设计,底层支持 Mediapipe,全程无需联网,确保数据隐私安全。 GitHub 做私域健身的 UP 主,大…

2026/10/11 13:03:46 阅读更多 →
无人机视角交通目标检测:YOLOv8小目标训练与OBB旋转框实战指南

无人机视角交通目标检测:YOLOv8小目标训练与OBB旋转框实战指南

简介:这是一份面向智能交通、自动驾驶与智慧城市应用的无人机视角交通目标检测YOLO格式数据集。数据集包含956张训练航拍图与169张验证航拍图,覆盖公交、轿车、厢式货车、摩托车、船舶、商业车辆、工程车辆、特种车辆及区域特色车辆共9类陆海交通工具&am…

2026/10/11 13:03:46 阅读更多 →
多模型交叉验证:zotero-AI-Butler多模型并行总结与API端点路由配置完整指南

多模型交叉验证:zotero-AI-Butler多模型并行总结与API端点路由配置完整指南

人工智能大模型AI 应用科研 【免费下载链接】zotero-AI-Butler 【Zotero AI 管家】调用大模型,自动精读论文库里的论文,总结为Zotero笔记。支持主流大模型平台!您只需像往常一样把文献丢进 Zotero, 管家会自动帮您精读论文&#x…

2026/10/11 13:03:46 阅读更多 →
人物玩手机图片数据集:构建、标注与YOLOv8训练指南

人物玩手机图片数据集:构建、标注与YOLOv8训练指南

简介:面向深度学习与机器学习目标检测任务的人物玩手机图片数据集,可用于训练模型识别人们使用手机的典型姿态与状态。数据集共收录2015张jpg图像,并配套同等数量的xml标注文件,压缩包整体约311MB,数据规模适中&#x…

2026/10/11 13:03:46 阅读更多 →
OpenCV+MediaPipe+CNN:手势识别控制鼠标的完整实现

OpenCV+MediaPipe+CNN:手势识别控制鼠标的完整实现

简介:一套基于OpenCV、Mediapipe与CNN的手势识别鼠标操控方案,面向Python开发者、计算机视觉初学者及人机交互爱好者。项目通过摄像头采集视频流,利用Mediapipe完成手部关键点检测,再将处理后的数据送入卷积神经网络进行手势分类&…

2026/10/11 13:02:45 阅读更多 →

日新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 10:45:37 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 10:38:42 阅读更多 →