如何在多个GatewayWorker间互发消息?

0

本来有个业务放在Applications/App1下,
现在要做个消息队列,单独开了个GatewayWorker,为App2,
但客户端连接的是App1的Gateway,
在App2中处理消息队列时,如何发消息给App1中的某个客户端?

已邀请:

walkor

赞同来自:

参考手册 在其它项目中推送
http://www.workerman.net/gatewaydoc/advanced/push.html

selectotz

赞同来自:

@walkor
现在碰到类似的问题。用了GatewayWorker,一个项目使用了2个,一个为大厅服务,一个为聊天服务。


现在需求是:客户端同时保持大厅与聊天服务的两个连接,数据共享通过redis。现在有想法是希望聊天服务和大厅服务互相通信,有看到上面的链接,觉得每个服务内新增一个Text协议的InnerGatewayWorker可以满足要求。
问题如下:
1、stream_socket_client() 互相调用的该连接是每个服务中(假设每个服务开启4进程)的进程都得新建一个吗? 如何保持连接? 需要做保持连接的额外操作吗?例如加心跳? 直接在OnWorkerStart中创建好连接? 还是每次发消息进行创建新的,用完就close? 接收者如何定位每个真正客户端的连接是在哪个进程中的(worker id)?


2、此时我还有一个Java写的用于处理一些纯逻辑的常驻程序,用Gearman进行 聊天服务中的Job创建和回调,因Java程序是常驻的,所以也希望能够主动发起给聊天服务的结果消息,从而转发给真正的客户。那么Java程序这边也是创建一个tcp的长连接吗? 如1问题中,需要做额外的保持连接? 还是每次用完就close?


谢谢!

selectotz

赞同来自:

@walkor


1中如何给客户端发消息的知道了,因为绑定了UID的,直接sendToUid

walkor

赞同来自:

1、每次新建一个链接好一些,用完关闭。因为php-fpm没办法及时处理链接断开事件,也没有定时器的功能,php-fpm下维持的长链接不好做定时发心跳给服务端,如果链接断开无法及时发现导致业务异常。


2、java程序可以创建一个长链接到GatewayWorker,定时发送数据保持链接,能够及时处理链接断开等事件。

要回复问题请先登录注册