thinkphp结合workerman和gateway实现数据同步
thinkphp结合workerman和gateway实现数据同步
0x10安装扩展
composer require topthink/think-worker=2.0.*
composer require workerman/gatewayclient
此安装仅针对5.1,其他版本根据官方要求安装。client仅针对3.0.8以上,具体看GitHub
0x20服务端Gateway
0x21config/worker_gateway.php
<?php // +---------------------------------------------------------------------- // | ThinkPHP [ WE CAN DO IT JUST THINK IT ] // +---------------------------------------------------------------------- // | Copyright (c) 2006-2018 http://thinkphp.cn All rights reserved. // +---------------------------------------------------------------------- // | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 ) // +---------------------------------------------------------------------- // | Author: liu21st <liu21st@gmail.com> // +---------------------------------------------------------------------- // +---------------------------------------------------------------------- // | Workerman设置 仅对 php think worker:gateway 指令有效 // +---------------------------------------------------------------------- return [ // BusinsessWorker配置 'businessWorker' => [ 'name' => 'BusinessWorker', 'count' => 1, 'eventHandler' => '\app\http\Gateway', ], ];
0x22 application/http/Gateway.php
<?php namespace app\http; use GatewayWorker\Lib\Gateway as Way; class GateWay { public static function onWebSocketConnect($id, $data) { dump('设备连接,ID:' . $id); Way::bindUid($id, '1'); } public static function onMessage($client_id, $data) { Way::sendToClient($client_id, '服务端消息'); } }
0x23 向客户端发送消息
//use GatewayClient\Gateway; $post = request()->post(); Gateway::$registerAddress = '127.0.0.1:1236'; // 向任意uid的网站页面发送数据 Gateway::sendToUid('1', json_encode($post)); dump($post);
0x30客户端代码
客户端需要用到command,即thinkphp命令行
protected function execute(Input $input, Output $output) { //忽略.... $a = new Worker(); $a->onWorkerStart = function ($work) { $con = new AsyncTcpConnection('ws://192.168.25.149:2346');//服务端地址 $con->onConnect = function (AsyncTcpConnection $con) { // 连接成功的事件 }; $con->onMessage = function (AsyncTcpConnection $con, $data) { dump($data);//来自服务端的消息 }; $con->connect(); }; Worker::runAll(); }
0x40效果图
本文来自博客园,作者:小枫同学,除网络转载的部分,其他版权属于作者和博客园所有,未经作者或博客园许可,禁止转载、复制、重新发布完整或者部分文字、代码、图片等信息,否则将保留追究法律责任的权利(如博客侵权了您的作品,本人再次表示抱歉,请将原创地址发送至下文邮箱,核实后立刻删除。)。查阅文章的同学,由于网络爬虫严重,有些代码并不会完整贴出来或者存在bug,不过你可以发送邮件到xfstune@126.com获取新代码,记得附上文章链接
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现