首页 > 其他分享 >如何不改动 GatewayWorker 依赖包下自定义协议

如何不改动 GatewayWorker 依赖包下自定义协议

时间:2022-10-29 13:55:37浏览次数:53  
标签:改动 Register 自定义 Gateway worker GatewayWorker gateway

前言:

         GatewayWorker 是 Workerman 的一个框架,对应用层开发者更友好。GatewayWorker 多了一个网关,也就是 Gateway,负责与客户端连接,消息转发等。而自定义的协议,也就是 gateway 面向客户端提供服务的协议,下面就简单收一下 GatewayWorker 启动后连接的过程吧。

 

GatewayWorker 流程:

1.  运行 php think worker:gateway start。

2.  启动 Register 进程并开始端口监听。

3.  启动 BusinessWorker 进程,开始异步连接 Register。

4.  启动 Gateway 进程,开启内部协议 (GatewayProtocol) 并监听,同时异步连接 Register。

5.  Gateway 进程将开启的 GatewayProtocol 服务地址发给 Register。

6.  Register 接收 Gateway 内部通讯地址广播给所有 BusinessWorker 进程。

7.  BusinessWorker 异步链接 Gateway,同时 Gateway 也监听来自客户端的链接。

8. 当客户端连接 Gateway 发来消息时,则他从连接的 BusinessWorker 中抽取一个转发。

9.  BusinessWorker 则将连接事件交给 Event 业务处理。

10. Event 处理后又发给 Gateway,Gateway 再发给客户端。

 

ThinkPHP 集成 GatewayWorker:

        现在新版的 TP 框架已经很好的集成了 GatewayWorker,不再像以前要改动入口文件。composer require topthink/think-worker 就可以安装,里面分别时 think-worker,gateway-worker 和 workerman 三个包。而为了不破环 vendor 包,自定义的协议最好写在 TP 框架的应用层。

 

开始操作:

1.  app 目录下创建一个 library (目录自行控制),再见一下 Game.php (举个例子,协议名看自己)。

2.  Game.php 需要实现 Workerman 的 ProtocolInterface,且要完成 input,decode,encode 三个方法,之前有介绍,这里就略过。

3. 打开 config 的 gateway_worker.php,以下先不做处理的写好 game 协议。

4. 直接 php think worker:gateway start 运行,则直接报错。

5. 因为 gateway 外部协议需要 Workerman\Protocols 的命令空间,所以只需要给自定义的协议类起一个别名。

class_alias('app\library\Game', 'Protocols\Game');

6. 运行一下并做了测试,这样就完成了。

 

标签:改动,Register,自定义,Gateway,worker,GatewayWorker,gateway
From: https://www.cnblogs.com/zerofc/p/16838593.html

相关文章

  • 【Vue2.0学习】—Todolist案例自定义事件(六十)
    【Vue2.0学习】—Todolist案例自定义事件(六十)......
  • 【Vue2.0学习】—组件的自定义事件(五十八)
    【Vue2.0学习】—组件的自定义事件(五十八)组件的自定义事件一种组件间通信的方式:适用于子组件—>父组件使用场景:A是父组件,B是子组件,B想给A传数据,那么就要A给B绑定自定义事件,......
  • 分页组件自定义props
    <template><el-paginationbackground@size-change="handleSizeChange"@current-change="handleCurrentChange":page-sizes="pageSizes":page......
  • Mybatis 之 自定义插件 yyyy-MM
    请结合上一篇>>> MP插件原理  <<<  以及  >>>  Mybatis插件原理 <<< 进行查看查看 使用场景:在写一些与月份为单位的场景中,如:薪资系统(月薪制)1、Ja......
  • Mybatis 之 自定义别名处理插件
    请结合上一篇>>> MP插件原理  <<<  以及  >>>  Mybatis插件原理 <<< 进行查看查看 MP开发中,遇到的问题,动态的Wrapper产生的SQL中,主要出现在组合......
  • 自定义对象属性操作
    最基本点运算letperson={name:'henry',age:18,run:function(){console.log('running');}}person.run();属性的读取:letperson={name:'......
  • 企业级自定义表单引擎解决方案(十五)--前端开源说明
    一直做后端开发,前端还真不是强项,半桶水的样子,好在现在前端框架和组件层出不穷,基本上勉强可以上路。自定义表单对前端要求非常高,技术上的难度不亚于后端,而且要考虑扩展性......
  • vs.net 效率提升-自定义快捷键
    工欲善其事必先利其器,记录一下自己开发时常用的几个自定义的快捷键。做了这么多年了用着还是比较顺手的分享下~~~~设置时有时设置不成功,非得一项一......
  • Winform 无边框 绘制自定义边框
    privatevoidFrmLogin_Paint(objectsender,PaintEventArgse){///自定义绘制边框颜色//e.Graphics.DrawRectangle(Pens.DarkOliveGr......
  • Winform 使用panel 自定义拖动窗体
    privatevoidpanel1_MouseDown(objectsender,MouseEventArgs{FromCustomStyle.MoveForm(this,this.panel1);}///<summary>///拖动Panel窗体移动///</......