当前位置: 首页 > 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.lryc.cn/news/575194.html

相关文章:

  • 机器学习×第十五卷:集成学习下篇——她开始构建每一轮更接近你的贴靠路径(XGBoost)
  • 基于STM32的个人健康助手的设计
  • Containerd 容器技术
  • 基于Hp感染的慢性胃炎居家管理小程序的设计与实现(消息震动)
  • LVS-DR负载均衡群集深度实践:高性能架构设计与排障指南
  • 鸿蒙OpenHarmony[Disassembler反汇编工具]ArkTS运编译工具链
  • vue3递归组件的使用
  • LVS-NAT负载均衡群集实战:原理、部署与问题排查
  • Vue计算属性与监视属性
  • 机器人 “离线觉醒” ? 摆脱人类“控制”!Google DeepMind 优化 AI 让机器人断网不断智!
  • spring项目启动sheel脚本
  • 如何打造Apache Top-Level开源时序数据库IoTDB
  • 北斗导航 | 基于CNN-LSTM-PSO算法的接收机自主完好性监测算法
  • 服务器开放端口如何设置,本地内网开通应用端口让外网访问连接步骤
  • Fisco Bcos学习 - 控制台搭建和基本使用
  • 在ASP.NET Core WebApi中使用标识框架(Identity)
  • 网络安全漏洞扫描是什么?如何识别目标进行扫描?
  • 通用 Excel 导出功能设计与实现:动态列选择与灵活配置
  • 国道观察者手记
  • React + Umi(Umijs/Max) 搭建项目及配置
  • 大学专业科普 | 物联网、自动化和人工智能
  • 多服务器IP白名单配置(使用redis stream实现)
  • 神经网络的运作方式类比讲解
  • 【EI会议征稿】东北大学主办第三届机器视觉、图像处理与影像技术国际会议(MVIPIT 2025)
  • Arm架构下麒麟V10桌面版安装MySQL
  • Android14音频子系统-Linux音频子系统ASoC-ALSA
  • Linux size命令详解
  • Android14音频子系统-Linux音频子系统ALSA
  • MFC对话框启动时就隐藏窗口
  • 开疆智能CCLinkIE转ModbusTCP网关连接脉冲计数器配置案例