多个GATEWAY进程的客户端的连接信息在哪维护,如何广播所有GATEWAY进程上连接的客户端
每个Gateway进程会维护自己的客户端链接,并且都会有自己的内部通讯内网ip及端口(各个Gateway进程内部通讯ip端口都不一样,使得BussnessWorker可以识别特定的Gateway进程并与之通讯),workerman会将所有Gateway进程的内部通讯的ip端口记录在一个存储里面(可能是文件或者memcache,取决与Config/Store::$driver,注意采用文件存储时无法使用分布式),BussnessWorker进程启动的时候会读取存储中与Gateway通讯的ip端口并与之建立TCP长链接,并保存这些链接在数组中。当BussnessWorker要向所有客户端链接广播数据时,只需要向这些长链接各发送一个cmd为CMD_SEND_TO_ALL的数据包即可,每个Gateway进程收到数据包发现是CMD_SEND_TO_ALL后便向自己维护的客户端链接发送需要广播的数据即可。这样每个链接到Gateway上的客户端都会收到广播的数据了。
那如果我想通过BUSSNESS 向指定的一个或者多个UID做通知,框架支持么
逐一针对UID进行发送信息就可以了
ayamzh 那如果我想通过BUSSNESS 向指定的一个或者多个UID做通知,框架支持么
可以的,有现成的接口,Gateway::sendToUid
每个Gateway进程会维护自己的客户端链接,并且都会有自己的内部通讯内网ip及端口(各个Gateway进程内部通讯ip端口都不一样,使得BussnessWorker可以识别特定的Gateway进程并与之通讯),workerman会将所有Gateway进程的内部通讯的ip端口记录在一个存储里面(可能是文件或者memcache,取决与Config/Store::$driver,注意采用文件存储时无法使用分布式),BussnessWorker进程启动的时候会读取存储中与Gateway通讯的ip端口并与之建立TCP长链接,并保存这些链接在数组中。当BussnessWorker要向所有客户端链接广播数据时,只需要向这些长链接各发送一个cmd为CMD_SEND_TO_ALL的数据包即可,每个Gateway进程收到数据包发现是CMD_SEND_TO_ALL后便向自己维护的客户端链接发送需要广播的数据即可。这样每个链接到Gateway上的客户端都会收到广播的数据了。
那如果我想通过BUSSNESS 向指定的一个或者多个UID做通知,框架支持么
逐一针对UID进行发送信息就可以了
可以的,有现成的接口,Gateway::sendToUid