这个图 有些地方没有看懂 就是 worker 进程 是怎么从多个gateway里面选择一个 转发给客户端的 gateway进程 又是怎么从多个worker里面选择一个来处理的 追源码的时候没有看见这里面的流程 可以用worker进程 从多个gateway 进程选择选择一个说明一下。
题外话 大大的源码里注释相当人性化了,而且好多地方还都是中文注释呢,那么明显的实现说看不见不合理呀,只能说还是你源码看的多少粗暴。
首先建议把官方手册介绍的原理先熟读一遍,然后咱们分享细节 https://www.workerman.net/doc/gateway-worker/principle.html
上面的工作做好了,且为了方便表述问题,我们做如下上下文设定
先说client和gateway通信
再来说一下gateway和worker通信 当worker进程返回数据给设定的客户端时【其实是events代理帮干的】,会根据client_id反解出相应的gateway进程的内部IP、端口, 这样worker-3进程自然就知道该连接哪个gateway进程了,这里自然就是我们设定的gateway-2进程。
👍
1 client-7发起连接,此时所有的gateway进程受内核调度遴选出gateway-2进程处理客户端连接; 这个第一步 不是workerman 实现的吗? 怎么变成内核调度选出gateway-2
workerman实现了多进程模型以及网络IO管理,但是到底由哪个进程来处理哪个TCP连接,workerman没有调度权【不要忘了一开始的上下文设定,若非要举一种特例:那就是在多worker+单进程模式下,开发者还是有权决定让哪个进程来处理哪个连接,其实想想只不过是路由到不同的端口,然后交给唯一的一个子进程处理而已,只有一个子进程干活还用遴选吗?所以仅仅是一种特例而已】
再来说一下gateway和worker通信, 那gateway与worker通信, 从多个worker 里面选择一个 也是内核调度的吗
这种情形当然是可以从业务层面调度的【我们也知道gatewayworker框架已经帮代劳了】,但是它和上面描述的情况根本就不是一码事,因为此时选择哪个worker来处理是建立在先前worker已经连接到gateway基础之上这个大背景下的,但是反方向过来那就又变成了只能是内核调度,要理解这微妙的区别,必须先把谁是客户端,谁是服务端的相对角色厘清,因为全双工的不同方向通信手段是不尽相同的。
嗯 基本上懂了 我们选定研究对象: client-7客户端, gateway-2进程, worker-3进程 返回时候 也是woker-3 返回到gate-way2 吧 不会换一个gateway 进程吧
是滴,按照默认路由模型,这样就对了
题外话
大大的源码里注释相当人性化了,而且好多地方还都是中文注释呢,那么明显的实现说看不见不合理呀,只能说还是你源码看的多少粗暴。
首先建议把官方手册介绍的原理先熟读一遍,然后咱们分享细节
https://www.workerman.net/doc/gateway-worker/principle.html
上面的工作做好了,且为了方便表述问题,我们做如下上下文设定
先说client和gateway通信
再来说一下gateway和worker通信
当worker进程返回数据给设定的客户端时【其实是events代理帮干的】,会根据client_id反解出相应的gateway进程的内部IP、端口, 这样worker-3进程自然就知道该连接哪个gateway进程了,这里自然就是我们设定的gateway-2进程。
👍
1 client-7发起连接,此时所有的gateway进程受内核调度遴选出gateway-2进程处理客户端连接; 这个第一步 不是workerman 实现的吗? 怎么变成内核调度选出gateway-2
workerman实现了多进程模型以及网络IO管理,但是到底由哪个进程来处理哪个TCP连接,workerman没有调度权【不要忘了一开始的上下文设定,若非要举一种特例:那就是在多worker+单进程模式下,开发者还是有权决定让哪个进程来处理哪个连接,其实想想只不过是路由到不同的端口,然后交给唯一的一个子进程处理而已,只有一个子进程干活还用遴选吗?所以仅仅是一种特例而已】
再来说一下gateway和worker通信, 那gateway与worker通信, 从多个worker 里面选择一个 也是内核调度的吗
这种情形当然是可以从业务层面调度的【我们也知道gatewayworker框架已经帮代劳了】,但是它和上面描述的情况根本就不是一码事,因为此时选择哪个worker来处理是建立在先前worker已经连接到gateway基础之上这个大背景下的,但是反方向过来那就又变成了只能是内核调度,要理解这微妙的区别,必须先把谁是客户端,谁是服务端的相对角色厘清,因为全双工的不同方向通信手段是不尽相同的。
嗯 基本上懂了 我们选定研究对象: client-7客户端, gateway-2进程, worker-3进程 返回时候 也是woker-3 返回到gate-way2 吧 不会换一个gateway 进程吧
是滴,按照默认路由模型,这样就对了