GatewayWorker

evilk

初学者,请教几个问题

1.GatewayWorker中,假如开启了5个BusinessWorker进程,此时有10个客户端连接上来,
每个work进程维持2个连接,假如每个连接都需要进行数据操作,此时每个work进程是如何工作的呢
是2个连接,串行起来,一个接着一个操作吗

2.GatewayWorker与其他web框架相结合,我按照demo,可以成功的完成类似的功能:
用户打开一个页面,此时与GatewayWorker server端通过 websocket 建立连接,
用户完成一个操作,触发一个 消息推送 事件,我在框架里面是把
GatewayClient\Gateway 这个文件加入到了框架内部,然后在web后端(也就是框架内部),通过
GatewayClient\Gateway 去推送消息,确实并没有经过Events.php ,也就是如文档中所说
“GatewayWorker不处理任何业务逻辑,GatewayWorker仅仅当做一个单向的推送通道”,
感觉这样的话,GatewayWorker 作为server端,只是起到了,开启进程,监听端口,相当于一个中转站的作用
作为辅助 web端 的一个角色,不知道这样理解,是否正确?

3.还有想问下,类似workman这种框架 在一般的web应用中,基本上都是起到一个 辅助性的 角色吧,
主要的业务还是在 web端 进行处理的吧

4.如果想实现一个客户端上传图片,server端保存上传的图片,这样的功能,应该如何操作呢
前端页面js/后端server端,不知道是不是跟传统的web应用开发 类似

5.顺便问下,PHPSocket.IO 跟 workman ,还有 GatewayWorker,之间有什么区别吗,如果我想在web应用中加入消息推送的功能,用哪种比较合适呢,感觉这三者能完成的功能,大同小异,如有不对,希望指正,谢谢

GatewayWorker 文档示例中,在bind.php 中 ,
use GatewayClient\Gateway;
(并没有 require_once '/your/path/GatewayClient/Gateway.php';) 这段代码,我注释了
Gateway::$registerAddress = '127.0.0.1:1238';
报错 Class 'GatewayClient\Gateway' not found,Gateway 在 Applications/YourApp/GatewayClient/Gateway.php, Gateway.php的命名空间是 “GatewayClient” 能解答下,这是为什么吗?

刚接触不久,有很多不懂,谢谢,共勉

6011 2 0
2个回答

walkor

1、就单个进程而言,请求都是串行执行的,不会有并发问题
2、使用GatewayClient时,在WebServer角度看,GatewayWorker是当作一个单向通讯通道。
当然GatewayWorker自身也可以做双向通讯,也就是客户端直接发消息给GatewayWorker(在Events.php处理)。
3、web应用中workerman的角色是什么主要看用途,例如有些公司用workerman做服务化的,例如做rpc。所有的业务逻辑都写在workerman里,nginx+php-fpm只作为一个模版拼接展现,实际业务逻辑都封装在服务里,php-fpm去调用组装。这个时候workerman承载者几乎所有的业务,可不是简单的一个辅助。我之前任职的三家上市公司都是类似这种架构的。

4、workerman里http协议上传图片和普通PHP类似,但是有一些差别,参考手册http://doc.workerman.net/315182。当然上传图片完全可以用nginx+php-fpm来做也没有什么问题。

5、PHPSocket.IO和GatewayWorker都是基于workerman开发的,PHPSocket.IO是php版本的socket.io,与GatewayWorker区别参见这个帖子http://wenda.workerman.net/?/question/928。
这里有http://doc2.workerman.net/326102。
相比下workerman更底层,更灵活,但是对php开发者要求也最高。但是如果只是简单的应用并且在线人数不高(不超过万人在线)用三者都可以,哪个顺手用哪个。如果超过万人在线的长连接即时通讯项目,用GatewayWorker比较好,底层支持多服务器分布式部署,只要加机器就能承载更多的在线人数,业务代码不用任何更改。

GatewayClient如果是用composer装的会利用composer的autoload自动加载,如果不用composer就自己require进去。

  • 暂无评论
amani

请问这个类找不到的问题解决了吗

  • 暂无评论
年代过于久远,无法发表回答
🔝