tp6 gatewayWorker
composer
composer require workerman/gateway-worker
开启端口1236 2348
修改配置
config\gateway_worker.php
return [// 扩展自身需要的配置'protocol' => 'websocket', // 协议 支持 tcp udp unix http websocket text'host' => '0.0.0.0', // 监听地址'port' => 2348, // 监听端口'socket' => '', // 完整监听地址// ----wss'ssl' => true,'transport' => 'ssl','context' => ["ssl" => ['local_cert' => '/www/server/panel/vhost/cert/com/fullchain.pem', 'local_pk' => '/www/server/panel/vhost/cert/com/privkey.pem','verify_peer' => false,],], // socket 上下文选项
// ----wss'context' => [], // socket 上下文选项'register_deploy' => true, // 是否需要部署register'businessWorker_deploy' => true, // 是否需要部署businessWorker'gateway_deploy' => true, // 是否需要部署gateway// Register配置'registerAddress' => '127.0.0.1:1236',// Gateway配置'name' => 'thinkphp','count' => 1,'lanIp' => '127.0.0.1','startPort' => 2000,'daemonize' => false,'pingInterval' => 30,'pingNotResponseLimit' => 0,'pingData' => '{"type":"ping"}',// BusinsessWorker配置'businessWorker' => ['name' => 'BusinessWorker','count' => 1,
// 'eventHandler' => '\think\worker\Events','eventHandler' => '\app\http\Events', // 开发目录],];
创建类文件app\http\Events.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>
// +----------------------------------------------------------------------
namespace app\http;use GatewayWorker\Lib\Gateway;
use Workerman\Worker;/*** Worker 命令行服务类*/
class Events
{/*** onWorkerStart 事件回调* 当businessWorker进程启动时触发。每个进程生命周期内都只会触发一次** @access public* @param \Workerman\Worker $businessWorker* @return void*/public static function onWorkerStart(Worker $businessWorker){$app = new \think\worker\Application;$app->initialize();}/*** onConnect 事件回调* 当客户端连接上gateway进程时(TCP三次握手完毕时)触发** @access public* @param int $client_id* @return void*/public static function onConnect($client_id){$data = ["client_id" => $client_id,"msg" => "Your client_id",];Gateway::sendToCurrentClient( json_encode( $data , JSON_UNESCAPED_UNICODE ) );}/*** onWebSocketConnect 事件回调* 当客户端连接上gateway完成websocket握手时触发** @param integer $client_id 断开连接的客户端client_id* @param mixed $data* @return void*/public static function onWebSocketConnect($client_id, $data){var_export($data);}/*** onMessage 事件回调* 当客户端发来数据(Gateway进程收到数据)后触发** @access public* @param int $client_id* @param mixed $data* @return void*/public static function onMessage($client_id, $data){$message = json_decode($data,true);if( $message['type'] == 'bind'){Gateway::bindUid($client_id,$message['uid']);Gateway::sendToCurrentClient( json_encode(['code'=>200,'msg'=>'绑定成功!'],JSON_UNESCAPED_UNICODE) );}elseif($message['type'] == 'ping'){Gateway::sendToCurrentClient( json_encode(['code'=>200,'msg'=>'pong']) );}elseif($message['type'] == 'unbind'){Gateway::unbindUid($client_id, $client_id)( json_encode(['code'=>200,'type'=>'pong']) );}else{Gateway::sendToCurrentClient( json_encode(['code'=>200,'type'=>'else','msg'=>'hello world']) );}
// Gateway::sendToAll($data);
// Gateway::sendToClient( $client_id, "hellow word" );}/*** onClose 事件回调 当用户断开连接时触发的方法** @param integer $client_id 断开连接的客户端client_id* @return void*/public static function onClose($client_id){GateWay::sendToAll("client[$client_id] logout\n");}/*** onWorkerStop 事件回调* 当businessWorker进程退出时触发。每个进程生命周期内都只会触发一次。** @param \Workerman\Worker $businessWorker* @return void*/public static function onWorkerStop(Worker $businessWorker){echo "WorkerStop\n";}public function sendMsg( $content ) {if( isset( $content['type'] ) ) {$type = $content['type'];if( isset( $content['sendId'] ) && $content['sendId'] ) {$sendId = $content['sendId'];}$client_id = "";if( isset( $content['client_id'] ) && $content['client_id'] ) {$client_id = $content['client_id'];}if( $type == "pushSingle" ) {Gateway::sendToUid( $sendId, json_encode( $content , JSON_UNESCAPED_UNICODE ) );if( $client_id ) {Gateway::sendToClient( $client_id, json_encode( $content , JSON_UNESCAPED_UNICODE ) );}}elseif( $type == "any" ) {Gateway::sendToUid( $sendId, json_encode( $content , JSON_UNESCAPED_UNICODE ) );if( $client_id ) {Gateway::sendToClient( $client_id, json_encode( $content , JSON_UNESCAPED_UNICODE ) );}}}}}
在服务器根目录下启动命令
php think worker:gateway
php think worker:gateway status
php think worker:gateway start
php think worker:gateway -d
php think worker:gateway stop
php think worker:gateway reload
tp6 gatewayWorker相关推荐
- TP6灵活使用workerman和gatewayWorker
内容介绍 网上能够搜到一些文章,教你如何完全把gatewayWorker完美结合到一起的,但是我不喜欢这样.我甚至都不用官方的think-worker库.因为这种做法会牺牲很多灵活性.耦合太严重. 当 ...
- crm开源系统 tp框架_thinkphp6学习教程与源码 tp6开源CMS系统源码研究
thinkphp6最新正式版框架上市已经有一段时间了,从官方的介绍来看,tp6的框架和tp5有很大的区别,完全重新改写了底层架构代码和逻辑,所以不支持thinkphp5的无缝升级,也就是说如果你之前的 ...
- php 静态类在worker,GatewayWorker的Events.php中调用Worker::runAll()出现异常
如题,调用Worker::runAll(),终端运行 php start.php start 出现如下问题: 代码: public static function onWorkerStart() { ...
- PHP安装TP6的composer install报Undefined index: process 进程依赖于proc_open 这个函数不可用
报错:安装tp6时候的报错 方法一 翻译:进程依赖于proc_open 这个函数,在我安装的PHP中这个函数不可用. 禁用函数去掉这个即可,在php.ini文件里面 使用/proc_open 找到 ...
- GatewayWorker Not Support On Windows.
thinkphp版本:5.1 tp5.1运行命令行php think worker:gateway出现GatewayWorker Not Support On Windows.是因为在tp5.1的命令 ...
- WebSocket实战之————GatewayWorker使用笔记例子
参考文档:http://www.workerman.net/gatewaydoc/ 目录结构 ├── Applications // 这里是所有开发者应用项目 │ └── YourApp // 其中一 ...
- 127.0.0.1 myz.php,附录 – 1.0升级到2.0注意事项 - GatewayWorker 2.x 3.x 手册
如何知道自己使用的版本是1.0还是2.0 打开文件 GatewayWorker/Gateway.php,查看是否有常量VERSION,并且常量值大于等于2.0.0 class Gateway exte ...
- thinkphp开启子域名无法正常访问_解决TP6报错“当前访问路由未定义或不匹配”...
如果是报路由错误,则说明启用了路由控制,那么所有被访问的页面都需要配置路由,否则将无法访问. 例如: 在浏览器中运行http://hml.tp6.com/admin/getlog 报错:当前访问路由未 ...
- GatewayWorker+laravel5.5+layim即时通讯项目demo
其中一些思路是看一位老铁的老铁demo,感谢这位老铁! https://github.com/shmilylbelva/webim,这位老铁用的是环信,我这里是用GatewayWorker+larav ...
- thinkphp仿素材火教程_thinkphp6学习教程与源码 tp6开源CMS系统源码研究
thinkphp6最新正式版框架上市已经有一段时间了,从官方的介绍来看,tp6的框架和tp5有很大的区别,完全重新改写了底层架构代码和逻辑,所以不支持thinkphp5的无缝升级,也就是说如果你之前的 ...
最新文章
- ASP.NET之.NET FrameWork框架
- 《编程珠玑》 读书笔记
- 解决TIME_WAIT过多造成的问题
- 不使用jQuery对Web API接口POST,PUT,DELETE数据
- RESTEasy教程第2部分:Spring集成
- 标准评分卡分数计算原理_评分卡的形式、刻度及应用场景
- 被动声呐 相移波束形成_100天计划-DAY9-拖曳声呐
- leetcode python3 简单题160. Intersection of Two Linked Lists
- 与Flutter第一次亲密接触-Android 视角
- LINUX的文件链接,管道和用户组
- centos7/RHEL7最小化系统安装gnome图形界面
- SciTE AMPL配置问题
- C++配置OpenCv:一劳永逸
- 数论著作读书笔记(2013-04-14 23:22)
- SpringBoot文件上传文件大小限制The field file exceeds its maximum permitted size of 1048576 bytes.
- 用C语言实现布丰投针计算圆周率问题
- 聚类算法之K-Means,K-Means++,elkan K-Means和MiniBatch K-Means算法流程
- 图片转ascii字符画C语言,将图片转为ASCII字符画
- 我看过的关于职业规划最好最全面的一篇文章(因为在另外一个人博客中他转载的字体太大了颜色太鲜艳不适宜阅读,所以就自己转载了)
- 使用中文分词工具切分ArcGIS在线文档