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,它们不属于任何特定的服务或应用程序。当客户端应用程序与服务器建立连接时,操作系统会动态地为该连接分配一个可用的端口号。
所以说客户端去请求服务器的时候也会自动生成一个端口号,因为服务器返回的消息也是通过客户端的监听接受到消息的
以上内容为个人理解,不合理的地方欢迎大家指正