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

Workerman UDP怎么做客户端通信

冬枫同学_7570

冬枫同学_7570

发布时间:2026-09-06 12:41:06

|

631人浏览过

|

来源于php中文网

原创

UdpConnection 不能用作客户端,因其仅为框架内部入站连接句柄且构造函数私有;需用 PHP 原生 socket 或 stream_socket_client 实现 UDP 客户端通信,并注意超时设置与非阻塞处理以避免阻塞 Workerman 进程。

workerman udp怎么做客户端通信

UdpConnection 本身不提供「客户端连接」语义,Workerman 的 UDP Worker 默认是服务端角色 —— 它监听端口、接收任意来源的 UDP 数据包,并通过 $connection->send() 回复。真要模拟“客户端行为”,得绕开 Worker 的连接管理,直接用 PHP 原生 socket。


为什么不能直接 new UdpConnection 当客户端

UdpConnection 是 Workerman 内部封装的「入站连接句柄」,只在 onMessage 回调中由框架自动创建并传入。它没有构造函数对外暴露,也不支持主动绑定远端地址或发起 sendto。试图手动实例化会报 Fatal error: Uncaught Error: Call to private UdpConnection::__construct()


用 PHP 原生 socket 发起 UDP 请求

这是最轻量、最可控的方式,适合发心跳、查状态、对接第三方 SIP/GB28181 设备等场景:

  • socket_create(AF_INET, SOCK_DGRAM, SOL_UDP) 创建 socket
  • socket_sendto() 直接向目标 IP:Port 发包,无需 connect
  • socket_recvfrom() 接收响应(注意设超时,避免阻塞)
  • 记得 socket_close(),尤其在常驻进程里反复调用时防 fd 泄漏

示例片段:

$sock = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
socket_set_option($sock, SOL_SOCKET, SO_RCVTIMEO, ['sec' => 1, 'usec' => 0]);
socket_sendto($sock, $data, strlen($data), 0, '192.168.1.100', 5060);
$len = socket_recvfrom($sock, $buf, 2048, 0, $ip, $port);
socket_close($sock);

在 Workerman 进程里安全调用原生 socket

Workerman 的 event loop(ReactPHP 或 libevent)和原生 blocking socket 冲突。直接在 onMessage 里用 socket_recvfrom 会卡住整个进程。必须满足:

  • 只用于「发包 + 等少量响应」,且严格控制超时(如上面的 SO_RCVTIMEO
  • 避免在高并发 onMessage 中频繁创建/销毁 socket,可考虑复用 socket 资源池
  • 若需异步等待响应,应改用 Worker::$globalEvent->add() 注册可读事件,配合非阻塞 socket
  • 不要在定时器(Timer::add)里裸写 blocking recv,容易堆积

替代方案:用 stream_socket_client 模拟 UDP 客户端

PHP 的 stream_socket_client('udp://host:port', ...) 可以返回一个 stream resource,配合 stream_socket_sendto()stream_select() 实现非阻塞收发。但要注意:

  • 它底层仍调用系统 socket,行为与原生 socket 一致
  • stream_socket_client 的 UDP 模式不建立连接,只是方便封装
  • 无法像 TCP 那样用 fwrite/fread,必须用 stream_socket_sendto 显式指定地址
  • 错误处理更松散,比如目标不可达时可能静默失败,需检查返回值

实际用起来比原生 socket 少几行代码,但可控性略低。对简单探测类请求够用。


UDP 客户端通信在 Workerman 里本质是「借壳执行」,框架不托管生命周期。最容易踩的坑是忘记设 recv 超时,或者在 event loop 里混用 blocking IO —— 这会导致整个 Worker 进程假死。真正需要高频双向交互的场景(比如 GB28181 心跳保活),建议把客户端逻辑抽成独立子进程,或改用 Swoole 的 Co\Socket

相关文章

相关标签:

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

热门AI工具

更多
VibeKnow
VibeKnow Hot

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

WorkBuddy

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

DeepSeek

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

Laper
Laper Hot

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

豆包大模型

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

超级简历WonderCV

一款AI办公效率工具,主要用于免费求职简历模版下载制作,应届生职场人必备简历制作神器,适合需要提升相关任务效率的用户。

蛙蛙写作

一款AI论文写作工具,主要用于超级AI智能写作助手,适合需要提升相关任务效率的用户。

立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述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