原理

原理

关于TcpConnection的send函数

提问walkor 回复了问题 • 2 人关注 • 1 个回复 • 921 次浏览 • 2017-04-12 16:05 • 来自相关话题

哪位大神能讲解一下子进程退出 exit() 其中的 0 和 250 什么意思

提问NickBai 回复了问题 • 2 人关注 • 2 个回复 • 1679 次浏览 • 2017-03-29 13:05 • 来自相关话题

版主,master进程建立好listen的socket,fork出来子进程继承的是同一socket吗

提问walkor 回复了问题 • 2 人关注 • 1 个回复 • 741 次浏览 • 2017-02-28 14:02 • 来自相关话题

请问下, gateway worker信息路由是如何实现的

提问damao 回复了问题 • 3 人关注 • 5 个回复 • 1893 次浏览 • 2016-11-25 14:30 • 来自相关话题

信号重装问题

提问walkor 回复了问题 • 3 人关注 • 3 个回复 • 1037 次浏览 • 2016-11-02 20:42 • 来自相关话题

关于pcntl_wait与信号中断触发的问题

提问walkor 回复了问题 • 3 人关注 • 8 个回复 • 2143 次浏览 • 2016-10-09 10:57 • 来自相关话题

关于phpsocket.io的会话保持的问题

提问walkor 回复了问题 • 2 人关注 • 1 个回复 • 895 次浏览 • 2016-09-12 19:56 • 来自相关话题

getAllGatewayAddressesFromRegister()通过注册中心获取Gateway的通讯地址问题

提问walkor 回复了问题 • 2 人关注 • 3 个回复 • 1292 次浏览 • 2016-08-31 17:52 • 来自相关话题

EV_READ的回调方法问题

提问walkor 回复了问题 • 2 人关注 • 3 个回复 • 758 次浏览 • 2016-08-31 11:06 • 来自相关话题

关于event时间循环的问题请教

提问walkor 回复了问题 • 2 人关注 • 4 个回复 • 770 次浏览 • 2016-08-31 11:01 • 来自相关话题

TcpConnection中,baseRead读取数据原理问题

提问walkor 回复了问题 • 2 人关注 • 3 个回复 • 785 次浏览 • 2016-08-25 11:32 • 来自相关话题

stream_select ($read, $write, $except, $timeout ); 函数问题

提问latin 回复了问题 • 2 人关注 • 2 个回复 • 1294 次浏览 • 2016-08-08 10:29 • 来自相关话题

BusinessWorker 异步连接 Register

提问walkor 回复了问题 • 3 人关注 • 1 个回复 • 1243 次浏览 • 2016-08-05 15:08 • 来自相关话题

关于WORK进程连接GATEWAY的问题

提问walkor 回复了问题 • 2 人关注 • 3 个回复 • 664 次浏览 • 2016-08-02 17:42 • 来自相关话题

想了解下数据是如何分发到子进程的

提问walkor 回复了问题 • 4 人关注 • 3 个回复 • 1740 次浏览 • 2016-07-29 11:33 • 来自相关话题

workerman 工作流程,如进程,子进程,socket等关系,workerman是如何运作的?

提问walkor 回复了问题 • 17 人关注 • 5 个回复 • 25230 次浏览 • 2016-06-12 18:27 • 来自相关话题

请问下 stream_select 这个作用是什么,网上找不到相关资料

提问BoBo_123 回复了问题 • 3 人关注 • 2 个回复 • 1351 次浏览 • 2016-04-01 16:11 • 来自相关话题

socket.io为什么不能支持同端口多进程模式?

提问walkor 回复了问题 • 3 人关注 • 1 个回复 • 1797 次浏览 • 2016-03-27 01:26 • 来自相关话题

workerman 执行流程顺序

提问walkor 回复了问题 • 2 人关注 • 1 个回复 • 1102 次浏览 • 2016-02-02 17:33 • 来自相关话题

gatewayWorker内部通讯地址疑问

提问walkor 回复了问题 • 2 人关注 • 1 个回复 • 1116 次浏览 • 2016-01-30 10:58 • 来自相关话题

workerman 疑问

提问walkor 回复了问题 • 3 人关注 • 3 个回复 • 1216 次浏览 • 2016-01-30 10:53 • 来自相关话题

关于主进程与子进程的事件监听

提问walkor 回复了问题 • 2 人关注 • 1 个回复 • 1032 次浏览 • 2016-01-30 10:50 • 来自相关话题

Gatewayworker进程问题

提问walkor 回复了问题 • 2 人关注 • 1 个回复 • 1077 次浏览 • 2016-01-29 17:54 • 来自相关话题

关于GatewayWorke实现原理的问题

提问walkor 回复了问题 • 2 人关注 • 1 个回复 • 1061 次浏览 • 2016-01-28 16:10 • 来自相关话题

GatewayWorker 如何知道向哪个Gateway发送消息?

提问walkor 回复了问题 • 1 人关注 • 1 个回复 • 1143 次浏览 • 2016-01-12 21:16 • 来自相关话题

看了workerman的源代码,不理解在执行reload的命令时,为什么只reload一个子进程

提问walkor 回复了问题 • 2 人关注 • 1 个回复 • 1569 次浏览 • 2016-01-12 14:53 • 来自相关话题

聊天室,消息发出后,其他用户如何收到

提问walkor 回复了问题 • 1 人关注 • 1 个回复 • 971 次浏览 • 2016-01-11 19:21 • 来自相关话题

请问 Gateway::bindUid 时, 对应的信息会存储到哪里呢

提问walkor 回复了问题 • 1 人关注 • 1 个回复 • 1068 次浏览 • 2016-01-09 18:42 • 来自相关话题

直接贴代码

提问walkor 回复了问题 • 2 人关注 • 1 个回复 • 1174 次浏览 • 2016-01-09 18:37 • 来自相关话题

workerman-chat 代码疑问

提问walkor 回复了问题 • 1 人关注 • 1 个回复 • 1222 次浏览 • 2016-01-06 14:10 • 来自相关话题

workerman代码执行流程简述

提问walkor 回复了问题 • 16 人关注 • 5 个回复 • 8770 次浏览 • 2016-01-05 11:53 • 来自相关话题

GatewayWorker 流程疑问

提问walkor 回复了问题 • 1 人关注 • 1 个回复 • 975 次浏览 • 2016-01-04 19:46 • 来自相关话题

GatewayClient是通过TCP连接和发送消息的吗

提问walkor 回复了问题 • 1 人关注 • 2 个回复 • 1365 次浏览 • 2016-01-03 22:08 • 来自相关话题

jsonRpc 疑问

提问walkor 回复了问题 • 2 人关注 • 1 个回复 • 850 次浏览 • 2015-12-30 18:01 • 来自相关话题

workman 如何保证平滑重启

提问chinablue 回复了问题 • 1 人关注 • 4 个回复 • 1448 次浏览 • 2015-12-21 21:47 • 来自相关话题

gateway 进程模型

提问walkor 回复了问题 • 1 人关注 • 1 个回复 • 1225 次浏览 • 2015-12-10 18:27 • 来自相关话题

worker的创建进程数与实际处理消息的进程数

提问walkor 回复了问题 • 1 人关注 • 1 个回复 • 1035 次浏览 • 2015-11-21 14:01 • 来自相关话题

问关于Gateway::bindUid的多次绑定

提问魅籽 回复了问题 • 1 人关注 • 6 个回复 • 1095 次浏览 • 2015-11-18 17:02 • 来自相关话题

请问woker的clientId与gateway是如何对应的

提问walkor 回复了问题 • 1 人关注 • 3 个回复 • 1258 次浏览 • 2015-11-18 13:53 • 来自相关话题

stop 执行不是有一个进程么能获取主进程id

提问walkor 回复了问题 • 1 人关注 • 1 个回复 • 882 次浏览 • 2015-11-14 13:23 • 来自相关话题

条新动态, 点击查看
workerman有两种进程模型
1、基本的master worker模型
2、master gateway worker模型



http://wenda.workerman.net/uploads/answer/20140815/5670ea176... 显示全部 »
workerman有两种进程模型
1、基本的master worker模型
2、master gateway worker模型



http://wenda.workerman.net/uploads/answer/20140815/5670ea17653a1a6e6811ed5148f77c96.png


master进程为主进程,启动过程中读取conf配置,根据每个应用配置中的ip和端口创建监听socket,然后再根据配置中的进程数创建对应数量的子进程即worker进程,worker进程会自动继承master进程创建的监听socket,使得worker进程能够独立的接受并处理客户端的连接。而后master进程进入监听信号的逻辑中,监听worker进程退出信号(worker进程退出后,系统会自动向master进程发送一个SIGHCLD信号,mater进程会重新创建子进程,将缺失的子进程补上),master进程还会监听workermand脚本发来的停止信号(SIGINT)和平滑重启服务信号(SIGHUP)

worker进程为master进程派生出来的子进程,自动继承了master进程的监听socket,每个worker进程独立的接受并处理客户端的连接。

master worker模型比较适合业务简单的应用或者短连接应用


http://wenda.workerman.net/uploads/answer/20140815/workerman-gateway-process.png


这种模型多了一个gateway进程组,工作流程与master worker模型基本相同,区别是worker进程不再直接与客户端打交道,客户端与worker进程之间多了一个gateway进程,gateway专职处理网络IO,并维护客户端的长连接。

master gateway worker 模型非常适合长连接应用




jorry

jorry 回答了问题 • 2014-09-02 14:06 • 5 个回复 不感兴趣

workerman代码执行流程简述

赞同来自:

首先应该明白进程的含义。
在这里我们要就是它的并发执行的特点。
Workerman也实现了多个进程同时为一个服务端口提供并发处理。

WorkerMan工作原理:
一.从系统以命令行的方式启动服务
服务启动是由系统通过命令行的方式执行一段php代码即:bin/... 显示全部 »
首先应该明白进程的含义。
在这里我们要就是它的并发执行的特点。
Workerman也实现了多个进程同时为一个服务端口提供并发处理。

WorkerMan工作原理:
一.从系统以命令行的方式启动服务
服务启动是由系统通过命令行的方式执行一段php代码即:bin/wokermand
1.检测当前的运行环境。
2.设置框架的工作目录:WORKERMAN_ROOT_DIR。
3.载入主进程文件Core/Master类,主进程管理所有子进程,负责自身的运行状态控制和其所有子进程的管理工作。
4.生成单一模式配置对象,对象捆绑的是conf/workerman.conf配置文件及conf.d目录下的所有配置项目,而且conf.d优先级最高,所有配置项都有默认值。
5.启动框架时,php通过接口对系统的进程和进程id(PID)文件进行管理和记录,尽量保证当前只有一个进程在运行。
6.检测启动服务者身份,必须是以root启动。这样做的好处是,保证当前主进程为最高权限。
7.处理具体的命令行指定cmd。
8.最终的结果是:Man\Core\Master::run($worker_user);其中$worker_user为命令的第二个参数。即指定运行子进程的用户权限。


二.对外服务的执行流程
即Man\Core\Master::run();的执行过程。
1.初始化设置主进程名,获取内存资源id,消息队列id,并设置消息队列
2.检测程序运行环境
3.创建两个进程(变成守护进程)不理解。daemonize()
4.保存主进程pid到WORKERMAN_PID_FILE文件
5.创建三个信号:停止服务,挂起重启信号,退出信号installSignal()
6.依据每个conf.d下面的配置文件对应创建一个服务端口createListeningSockets()
7.依据配置conf.d文件创建指定数目的子进程createOneWorker(),并将同一类的子进程与对应配置文件的监听服务绑定。最后启动进程:$worker->start();
spawnWorkers();


三.$worker的启动过程
以上完成了主进程的创建、所有子进程的创建、服务的启动绑定,下面就是worker对象最终将提供的服务。
1.实例化过程和start()过程
(1).完成一些基本的参数初始化工作,如workerName、isPersistentConnection、maxRequests等
(2).使用事件轮询库将事件event绑定。一个worker一个进程,每个worker绑定一个事件轮询库,名字都是Libevent,因为是不同进程,所以互不相干。引入事件轮询库
Man/Core/Events/Libevent.php
(3).初始化与这个进程绑定的事件轮询库Libevent.php,轮询实现了添加、删除、循环三个操作。
(4).轮询库的初始化:申请内存,初始化定时器堆和事件队列,为event_base对象选择底层事件函数封装对象,初始化活动队列。
(5).启动事件机制。一共就三种事件:读事件,写事件,信号事件
(6).进入主体循环,等待触发。

四.Event机制
.......


五.特殊的G/W模型
Gateway专门处理网关,Worker专门处理业务逻辑。
Gateway管理所有的外部网络数据进出,外部数据可以是各种协议进入
它收到数据分进行数据处理,将其打包成二进制,并启动多进程
开通内部即本地端口
最后让其进程和端口绑定处于监听状态。

上述:Gateway一方面处于监听状态接收网关数据,
另一方面为自己开通本地(通常是本地)监听服务,提供给worker使用。
对外是多个进程绑定同一个对外服务,对内一个进程对应一个不同的本地监听服务。
注意:gateway与worker之间是二进制数据传输。

关于TcpConnection的send函数

提问walkor 回复了问题 • 2 人关注 • 1 个回复 • 921 次浏览 • 2017-04-12 16:05 • 来自相关话题

哪位大神能讲解一下子进程退出 exit() 其中的 0 和 250 什么意思

提问NickBai 回复了问题 • 2 人关注 • 2 个回复 • 1679 次浏览 • 2017-03-29 13:05 • 来自相关话题

想了解下数据是如何分发到子进程的

提问walkor 回复了问题 • 4 人关注 • 3 个回复 • 1740 次浏览 • 2016-07-29 11:33 • 来自相关话题

socket.io为什么不能支持同端口多进程模式?

提问walkor 回复了问题 • 3 人关注 • 1 个回复 • 1797 次浏览 • 2016-03-27 01:26 • 来自相关话题

worker进程数设置

提问aguai 回复了问题 • 1 人关注 • 2 个回复 • 1126 次浏览 • 2015-09-28 14:09 • 来自相关话题

workerman代码执行流程简述

提问walkor 回复了问题 • 16 人关注 • 5 个回复 • 8770 次浏览 • 2016-01-05 11:53 • 来自相关话题

workerman 工作流程,如进程,子进程,socket等关系,workerman是如何运作的?

提问walkor 回复了问题 • 17 人关注 • 5 个回复 • 25230 次浏览 • 2016-06-12 18:27 • 来自相关话题

关于TcpConnection的send函数

回复

提问walkor 回复了问题 • 2 人关注 • 1 个回复 • 921 次浏览 • 2017-04-12 16:05 • 来自相关话题

哪位大神能讲解一下子进程退出 exit() 其中的 0 和 250 什么意思

回复

提问NickBai 回复了问题 • 2 人关注 • 2 个回复 • 1679 次浏览 • 2017-03-29 13:05 • 来自相关话题

版主,master进程建立好listen的socket,fork出来子进程继承的是同一socket吗

回复

提问walkor 回复了问题 • 2 人关注 • 1 个回复 • 741 次浏览 • 2017-02-28 14:02 • 来自相关话题

请问下, gateway worker信息路由是如何实现的

回复

提问damao 回复了问题 • 3 人关注 • 5 个回复 • 1893 次浏览 • 2016-11-25 14:30 • 来自相关话题

信号重装问题

回复

提问walkor 回复了问题 • 3 人关注 • 3 个回复 • 1037 次浏览 • 2016-11-02 20:42 • 来自相关话题

关于pcntl_wait与信号中断触发的问题

回复

提问walkor 回复了问题 • 3 人关注 • 8 个回复 • 2143 次浏览 • 2016-10-09 10:57 • 来自相关话题

关于phpsocket.io的会话保持的问题

回复

提问walkor 回复了问题 • 2 人关注 • 1 个回复 • 895 次浏览 • 2016-09-12 19:56 • 来自相关话题

getAllGatewayAddressesFromRegister()通过注册中心获取Gateway的通讯地址问题

回复

提问walkor 回复了问题 • 2 人关注 • 3 个回复 • 1292 次浏览 • 2016-08-31 17:52 • 来自相关话题

EV_READ的回调方法问题

回复

提问walkor 回复了问题 • 2 人关注 • 3 个回复 • 758 次浏览 • 2016-08-31 11:06 • 来自相关话题

关于event时间循环的问题请教

回复

提问walkor 回复了问题 • 2 人关注 • 4 个回复 • 770 次浏览 • 2016-08-31 11:01 • 来自相关话题

TcpConnection中,baseRead读取数据原理问题

回复

提问walkor 回复了问题 • 2 人关注 • 3 个回复 • 785 次浏览 • 2016-08-25 11:32 • 来自相关话题

stream_select ($read, $write, $except, $timeout ); 函数问题

回复

提问latin 回复了问题 • 2 人关注 • 2 个回复 • 1294 次浏览 • 2016-08-08 10:29 • 来自相关话题

BusinessWorker 异步连接 Register

回复

提问walkor 回复了问题 • 3 人关注 • 1 个回复 • 1243 次浏览 • 2016-08-05 15:08 • 来自相关话题

关于WORK进程连接GATEWAY的问题

回复

提问walkor 回复了问题 • 2 人关注 • 3 个回复 • 664 次浏览 • 2016-08-02 17:42 • 来自相关话题

想了解下数据是如何分发到子进程的

回复

提问walkor 回复了问题 • 4 人关注 • 3 个回复 • 1740 次浏览 • 2016-07-29 11:33 • 来自相关话题

workerman 工作流程,如进程,子进程,socket等关系,workerman是如何运作的?

回复

提问walkor 回复了问题 • 17 人关注 • 5 个回复 • 25230 次浏览 • 2016-06-12 18:27 • 来自相关话题

请问下 stream_select 这个作用是什么,网上找不到相关资料

回复

提问BoBo_123 回复了问题 • 3 人关注 • 2 个回复 • 1351 次浏览 • 2016-04-01 16:11 • 来自相关话题

socket.io为什么不能支持同端口多进程模式?

回复

提问walkor 回复了问题 • 3 人关注 • 1 个回复 • 1797 次浏览 • 2016-03-27 01:26 • 来自相关话题

workerman 执行流程顺序

回复

提问walkor 回复了问题 • 2 人关注 • 1 个回复 • 1102 次浏览 • 2016-02-02 17:33 • 来自相关话题

gatewayWorker内部通讯地址疑问

回复

提问walkor 回复了问题 • 2 人关注 • 1 个回复 • 1116 次浏览 • 2016-01-30 10:58 • 来自相关话题

workerman 疑问

回复

提问walkor 回复了问题 • 3 人关注 • 3 个回复 • 1216 次浏览 • 2016-01-30 10:53 • 来自相关话题

关于主进程与子进程的事件监听

回复

提问walkor 回复了问题 • 2 人关注 • 1 个回复 • 1032 次浏览 • 2016-01-30 10:50 • 来自相关话题

Gatewayworker进程问题

回复

提问walkor 回复了问题 • 2 人关注 • 1 个回复 • 1077 次浏览 • 2016-01-29 17:54 • 来自相关话题

关于GatewayWorke实现原理的问题

回复

提问walkor 回复了问题 • 2 人关注 • 1 个回复 • 1061 次浏览 • 2016-01-28 16:10 • 来自相关话题

GatewayWorker 如何知道向哪个Gateway发送消息?

回复

提问walkor 回复了问题 • 1 人关注 • 1 个回复 • 1143 次浏览 • 2016-01-12 21:16 • 来自相关话题

看了workerman的源代码,不理解在执行reload的命令时,为什么只reload一个子进程

回复

提问walkor 回复了问题 • 2 人关注 • 1 个回复 • 1569 次浏览 • 2016-01-12 14:53 • 来自相关话题

聊天室,消息发出后,其他用户如何收到

回复

提问walkor 回复了问题 • 1 人关注 • 1 个回复 • 971 次浏览 • 2016-01-11 19:21 • 来自相关话题

请问 Gateway::bindUid 时, 对应的信息会存储到哪里呢

回复

提问walkor 回复了问题 • 1 人关注 • 1 个回复 • 1068 次浏览 • 2016-01-09 18:42 • 来自相关话题

直接贴代码

回复

提问walkor 回复了问题 • 2 人关注 • 1 个回复 • 1174 次浏览 • 2016-01-09 18:37 • 来自相关话题

workerman-chat 代码疑问

回复

提问walkor 回复了问题 • 1 人关注 • 1 个回复 • 1222 次浏览 • 2016-01-06 14:10 • 来自相关话题

workerman代码执行流程简述

回复

提问walkor 回复了问题 • 16 人关注 • 5 个回复 • 8770 次浏览 • 2016-01-05 11:53 • 来自相关话题

GatewayWorker 流程疑问

回复

提问walkor 回复了问题 • 1 人关注 • 1 个回复 • 975 次浏览 • 2016-01-04 19:46 • 来自相关话题

GatewayClient是通过TCP连接和发送消息的吗

回复

提问walkor 回复了问题 • 1 人关注 • 2 个回复 • 1365 次浏览 • 2016-01-03 22:08 • 来自相关话题

jsonRpc 疑问

回复

提问walkor 回复了问题 • 2 人关注 • 1 个回复 • 850 次浏览 • 2015-12-30 18:01 • 来自相关话题

workman 如何保证平滑重启

回复

提问chinablue 回复了问题 • 1 人关注 • 4 个回复 • 1448 次浏览 • 2015-12-21 21:47 • 来自相关话题

gateway 进程模型

回复

提问walkor 回复了问题 • 1 人关注 • 1 个回复 • 1225 次浏览 • 2015-12-10 18:27 • 来自相关话题

worker的创建进程数与实际处理消息的进程数

回复

提问walkor 回复了问题 • 1 人关注 • 1 个回复 • 1035 次浏览 • 2015-11-21 14:01 • 来自相关话题

问关于Gateway::bindUid的多次绑定

回复

提问魅籽 回复了问题 • 1 人关注 • 6 个回复 • 1095 次浏览 • 2015-11-18 17:02 • 来自相关话题

请问woker的clientId与gateway是如何对应的

回复

提问walkor 回复了问题 • 1 人关注 • 3 个回复 • 1258 次浏览 • 2015-11-18 13:53 • 来自相关话题

stop 执行不是有一个进程么能获取主进程id

回复

提问walkor 回复了问题 • 1 人关注 • 1 个回复 • 882 次浏览 • 2015-11-14 13:23 • 来自相关话题