当前位置: 首页 > news >正文

webman 利用tcp 做服务端 对接物联网

用webman 建立tcp 的服务端

安装webman
安装 composer require webman/gateway-worker

文件:config/plugin/webman/gateway-worker/process.php

这里定义了两个协议,tcp 用来对接物联网,ws 用来对接im

<?phpuse Webman\GatewayWorker\Gateway;
use Webman\GatewayWorker\BusinessWorker;
use Webman\GatewayWorker\Register;return ['gateway' => ['handler'     => Gateway::class,'listen'      => 'websocket://0.0.0.0:7272','count'       => 2,'reloadable'  => false,'constructor' => ['config' => ['lanIp'           => '127.0.0.1','startPort'       => 2300,'pingInterval'    => 25,'pingData'        => '{"type":"ping"}','registerAddress' => '127.0.0.1:1236','onConnect'       => function(){},]]],'gateway-tcp' => [ // 假设增加一个tcp端口的gateway进程'handler'     => Gateway::class,'listen'      => 'tcp://0.0.0.0:8383', //  注意这里端口不能重复'count'       => cpu_count(),'reloadable'  => false,'constructor' => ['config' => ['lanIp'           => '127.0.0.1','startPort'       => 3300, // 注意这里端口不能重复,步数大大一些,不能和上面2300太接近'pingInterval'    => 25,'pingData'        => '{"type":"ping"}','registerAddress' => '127.0.0.1:1236','onConnect'       => function(){},]]],'worker' => ['handler'     => BusinessWorker::class,'count'       => cpu_count()*2,'constructor' => ['config' => ['eventHandler'    => plugin\webman\gateway\Events::class,'name'            => 'ChatBusinessWorker','registerAddress' => '127.0.0.1:1236',]]],'register' => ['handler'     => Register::class,'listen'      => 'text://127.0.0.1:1236','count'       => 1, // Must be 1'reloadable'  => false,'constructor' => []],
];

文件:plugin/webman/gateway/Events.php

这里im 和 tcp 公用一套,需要注意要根据bind 的uid 来区别

<?phpnamespace plugin\webman\gateway;use GatewayWorker\Lib\Gateway;class Events
{public static function onWorkerStart($worker){}public static function onConnect($client_id){var_dump(5555,$client_id);Gateway::bindUid($client_id, '1');}public static function onWebSocketConnect($client_id, $data){}public static function onMessage($client_id, $message){var_dump(666,$client_id,$message);Gateway::sendToClient($client_id, "receive message $message");}public static function onClose($client_id){}}

文件:controller/IndexController.php

这里是在方法内主动发送数据

<?phpnamespace app\controller;use support\Request;
use GatewayWorker\Lib\Gateway;class IndexController
{public function index(Request $request){$uid='1';//查看是否在线var_dump('是否在线',!!Gateway::isUidOnline($uid));if(Gateway::isUidOnline($uid)){$message = "lizhili--" . date('H:i:s');Gateway::sendToUid($uid, $message . "\n");}return json(['code' => 0, 'msg' => 'ok']);}}

有个不错的 tcp 协议的测试工具

可以简单的测试 tcp 的链接发送,也可以做客户端

https://gitcode.com/open-source-toolkit/d6985/?utm_source=tools_gitcode&index=bottom&type=card
下载地址

http://www.lqws.cn/news/519679.html

相关文章:

  • 使用 Spread.net将 Excel 中的文本拆分为多段
  • 注解+AOP+自动配置实现自定义starter
  • Java8 Stream流:Stream流的思想和获取Stream流
  • 深入浅出:RocketMQ与Kafka的双剑合璧,实现高可用与高吞吐
  • 服务器不支持PUT,DELETE 的解决方案
  • python爬虫框架scrapy学习记录
  • 打造属于你的AI智能体,从数据开始 —— 使用 Bright Data MCP+Trae快速构建垂直智能体
  • 量学云讲堂2025朱永海慢牛开启第58期视频课程
  • 卡萨帝发布AI深度科技:实现从守护生活到守护文明的升级
  • Linux系统之Nginx反向代理与缓存
  • Aurora MySQL 3.05/3.06/3.07版本即将停用,全局数据库升级实战指南
  • 逆序对的数量
  • 基于MATLAB的BP神经网络的心电图分类方法应用
  • pyhton基础【16】函数进阶二
  • 仿Apple官网设计风格
  • HCIA-IP路由基础
  • 鸿蒙OH南向开发 轻量系统内核(LiteOS-M)【Shell】
  • 实测对比:用 Lynx 做网页,效率比传统工具提升 270% 的底层逻辑
  • 【Oracle学习笔记】4.索引(Index)
  • 【大厂机试题解法笔记】可以组成网络的服务器
  • FPGA基础 -- Verilog 格雷码(Gray Code)计数器设计与原理解析
  • 开疆智能CCLinkIE转ModbusTCP网关连接脉冲计数器配置案例
  • MySQL之存储过程详解
  • 自动化测试--Appium和ADB及常用指令
  • 分布式环境下 Spring Boot 项目基于雪花算法的唯一 ID 生成方案
  • php后台增加权限控制
  • LangGraph开篇-LangGraph 核心元素简介(官网文档解读)
  • Spring Web MVC ①
  • 用 Boost 库解析 .ini 和 .json 文件时的“坑”:注释导致的解析错误与解决方案
  • 湖北理元理律师事务所:债务规划中的法律与心理双轨模型