当前位置: 首页 > 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
下载地址

相关文章:

  • 小县城做网站app推广刷量
  • 一起做网店网站打不开企业品牌策划
  • 四川网站建设有哪些廊坊今日头条新闻
  • 免费网站怎么盈利模式抖音seo搜索优化
  • 网站首页模块如何做链接免费网站安全软件下载
  • 新疆建设厅招投标网站小程序推广50个方法
  • C# LINQ语法
  • Boss:攻击
  • 【MQTT】常见问题
  • MySQL之视图深度解析
  • 第2章,[标签 Win32] :编写兼容多字节字符集和 Unicode 字符集的 Windows 程序
  • 【DevTools浏览器开发者工具反调试之无限Debugger跳过】
  • SpringBoot高校党务系统
  • PyTorch RNN实战:快速上手教程
  • Python 数据分析与可视化 Day 7 - 可视化整合报告实战
  • Python核心可视化库:Matplotlib与Seaborn深度解析
  • request这个包中,get 这个方法里传入的是params ,post这个方法里传入的是data 和 json。这个区别是什么?
  • pscc系统如何部署,怎么更安全更便捷?
  • Linux 怎么恢复sshd.service
  • 结构体数组与Excel表格:数据库世界的理性与感性
  • 超级好用的小软件:geek,卸载软件,2m大小
  • Webpack 核心概念
  • 基于MATLAB的BP神经网络的心电图分类方法应用
  • Web后端基础:Java操作数据库----JDBC
  • 夏至之日,共赴实时 AI 之约:RTE Open Day@AGI Playground 2025 回顾
  • CAS 有什么问题?如何解决这些问题?