GatewayWorker 工作原理的理解

文章详细描述了如何在Windows系统下启动多个PHP服务,包括注册中心、客户端请求处理和业务逻辑服务,并探讨了服务间交互模式、端口号与进程的关系以及系统端口和动态端口的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.启动

以windows系统为例,启动文件为start_for_win.bat

CHCP 65001
php Applications\Chat\start_register.php 
Applications\Chat\start_web.php Applications\Chat\start_gateway.php 
Applications\Chat\start_businessworker.php
pause

实际上是启动了三个php文件

注册中心服务:start_register.php
接受客户端请求的服务:start_gateway.php
最终处理请求的服务:start_businessworker.php

2.三个服务之间的交互模式

注册中心 start_register.php 代码片段

//启动register服务,并监听端口1236
$register = new Register('text://127.0.0.1:1236');

处理客户端请求的服务, start_gateway.php 代码片段

...
//启动websocket服务,监听端口号为7272
$gateway = new Gateway("Websocket://0.0.0.0:7272");
...
//并且注册到register服务当中,可以理解为是register服务的客户端
$gateway->registerAddress = '127.0.0.1:1236';
...

worker服务:start_businessworker.php

官方解释:BusinessWorker类其实也是基于基础的Worker开发的。BusinessWorker是运行业务逻辑的进程,BusinessWorker收到Gateway转发来的事件及请求时会默认调用Events.php中的onConnect onMessage onClose方法处理事件及数据,开发者正是通过实现这些回调控制业务及流程。

所以官方在开发必读中有个说明:

业务开发只需要关注 Applications/项目/Events.php一个文件即可。
业务开发只需要关注 Applications/项目/Events.php一个文件即可。
业务开发只需要关注 Applications/项目/Events.php一个文件即可。

// 启动 bussinessWorker 进程
$worker = new BusinessWorker();
$worker->name = 'ChatBusinessWorker';
$worker->count = 4;
//注册到 register服务中
$worker->registerAddress = '127.0.0.1:1236';

3.交互模式图如下:

4.端口号和进程的关系理解

本人一直对端口理解不充分,这里总结一下

进程和端口号是两个独立的概念,进程是处理消息的,消息通过网卡进来后如何分配给进程呢,这个时候就需要给进程绑定个端口号,方便操作系统为其分配消息,举个学校接新生的例子

进程1:清华接新生老师

进程2:北大接新生老师

两个老师都在车站接新生,但是新生来了之后无法区分那个是清华的哪个是北大的,这时候就需要让老师举个牌子,这个牌子也就是端口号

进程1:老师举-清华大学-牌子 (也就是进程1绑定了端口)

进程2:老师举-北京大学-牌子 (也绑定了端口)

这时候火车到站了,也就是消息发过来了,这里有个车站管理人员(操作系统),他负责管理车站秩序,他看见学生后就进行如下安排:

A同学拿了清华通知书 -》去找清华老师 -》清华老师让他上车拉走(进程处理消息)

B同学拿了北大通知书 -》去找北大老师 -》北大老师让他上车拉走(进程处理消息)

5.端口号分类

端口分为两种类型:系统端口和动态端口。

系统端口(或称为知名端口)是预留给一些常用网络服务的端口,范围从0到1023。例如,HTTP服务通常使用端口号80,FTP服务使用端口号21,SSH服务使用端口号22等。这些端口号在大多数操作系统中已经被预先分配给相应的服务。

动态端口(或称为私有端口)是用于临时分配给客户端应用程序的端口范围。范围从1024到65535,它们不属于任何特定的服务或应用程序。当客户端应用程序与服务器建立连接时,操作系统会动态地为该连接分配一个可用的端口号

所以说客户端去请求服务器的时候也会自动生成一个端口号,因为服务器返回的消息也是通过客户端的监听接受到消息的

以上内容为个人理解,不合理的地方欢迎大家指正
 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

oraclechaozi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值