Gateway

Gateway

gateway进程连接分配不平衡

提问blogdaren 回复了问题 • 2 人关注 • 1 个回复 • 37 次浏览 • 4 天前 • 来自相关话题

Gateway中怎么把组跟uid绑定?

回复

提问WFD 发起了问题 • 1 人关注 • 0 个回复 • 60 次浏览 • 2018-11-21 16:04 • 来自相关话题

基于workerman框架的Gateway/Worker配合第三方框架下如何做websocket集群负载?

提问walkor 回复了问题 • 2 人关注 • 1 个回复 • 113 次浏览 • 2018-11-12 16:12 • 来自相关话题

用workerman和layim做了个网站聊天插件 webim-plugin

案例479820787 发表了文章 • 0 个评论 • 174 次浏览 • 2018-11-06 15:00 • 来自相关话题

用workerman - gatewayworker 和layim做了个网站聊天插件,官网登录后右下角就会弹出聊天面板,含有手机端和PC端,含有完整的右键菜单功能。欢迎大家访问查看。 官网地址:https://www.implugin.cn ...查看全部
用workerman - gatewayworker 和layim做了个网站聊天插件,官网登录后右下角就会弹出聊天面板,含有手机端和PC端,含有完整的右键菜单功能。欢迎大家访问查看。
官网地址:https://www.implugin.cn
展示效果:

EA87D294-2317-47DE-A0AC-8ED9FDD11E0A.png

 

gateway框架中的Events中onMessage()中如何获取客户端ip?

提问walkor 回复了问题 • 2 人关注 • 1 个回复 • 117 次浏览 • 2018-10-25 17:43 • 来自相关话题

急 thinkphp 使用gatewayclient 无法连接服务器

提问walkor 回复了问题 • 4 人关注 • 6 个回复 • 625 次浏览 • 2018-08-29 14:23 • 来自相关话题

GatewayWorker 中如何 给作为客户端的AsyncTcpConnection 发送信息

回复

提问tufei 回复了问题 • 1 人关注 • 1 个回复 • 222 次浏览 • 2018-08-08 10:33 • 来自相关话题

session设置和获取的bug,如果session数组中存在一个二维数组 用updateSession函数对本链接更新那个二维数组会有bug

提问walkor 回复了问题 • 3 人关注 • 1 个回复 • 251 次浏览 • 2018-08-03 11:04 • 来自相关话题

同一个用户登录不同设备,如何区分是移动端还是手机端

提问wesley_li 回复了问题 • 2 人关注 • 2 个回复 • 625 次浏览 • 2018-07-17 10:54 • 来自相关话题

gateway总是在发送数据给客户端后tcp状态位发送FIN断开连接。

提问walkor 回复了问题 • 2 人关注 • 1 个回复 • 263 次浏览 • 2018-06-19 16:33 • 来自相关话题

gatewayworker 有时候不进入worker

提问six 回复了问题 • 2 人关注 • 1 个回复 • 216 次浏览 • 2018-06-11 10:22 • 来自相关话题

GateWay怎么使用证书。,用的text协议

提问walkor 回复了问题 • 2 人关注 • 1 个回复 • 300 次浏览 • 2018-06-04 04:33 • 来自相关话题

按照文档分离mvc层写逻辑出现stream_socket_sendto(): Զ�����ǿ�ȹر��һ�����е���ӡ�

提问bianchao1 回复了问题 • 5 人关注 • 5 个回复 • 807 次浏览 • 2018-05-29 15:32 • 来自相关话题

stream_socket_sendto(): Զ�����ǿ�ȹر��һ�����е���ӡ�

提问bianchao1 回复了问题 • 6 人关注 • 6 个回复 • 1044 次浏览 • 2018-05-29 15:19 • 来自相关话题

Apache 反向代理 GatewayWorker 失败

提问maq 回复了问题 • 2 人关注 • 2 个回复 • 261 次浏览 • 2018-05-16 18:37 • 来自相关话题

GatewayWorker中client_id和uid之间的关系

提问walkor 回复了问题 • 5 人关注 • 4 个回复 • 2504 次浏览 • 2018-05-07 10:18 • 来自相关话题

心跳包设置pingNotResponseLimit后,客户端会断开

提问walkor 回复了问题 • 5 人关注 • 4 个回复 • 1164 次浏览 • 2018-04-27 14:38 • 来自相关话题

20多个终端连接服务器后,服务器会出现延迟,终端断开后还会继续接收数据

提问six 回复了问题 • 2 人关注 • 1 个回复 • 390 次浏览 • 2018-04-24 18:58 • 来自相关话题

服务器通过tcp长连接接收数据

提问zhengweipx 回复了问题 • 2 人关注 • 2 个回复 • 737 次浏览 • 2018-04-24 14:15 • 来自相关话题

start_gateway.php里可以获取client_id吗?

提问walkor 回复了问题 • 2 人关注 • 1 个回复 • 350 次浏览 • 2018-04-13 13:58 • 来自相关话题

如何在onWebSocketConnect回调中,获取client_id?

回复

提问JoeZing 回复了问题 • 2 人关注 • 4 个回复 • 1022 次浏览 • 2018-04-12 14:48 • 来自相关话题

分布式问题求助

提问walkor 回复了问题 • 3 人关注 • 2 个回复 • 330 次浏览 • 2018-04-07 14:48 • 来自相关话题

gateway,无法查看status,显示not run。

回复

提问banice 回复了问题 • 1 人关注 • 1 个回复 • 394 次浏览 • 2017-12-18 08:49 • 来自相关话题

GatewayWorker报错SendBufferToWorker fail. May be the send buffer are overflow

提问mingjian 回复了问题 • 2 人关注 • 2 个回复 • 570 次浏览 • 2017-12-15 15:40 • 来自相关话题

GatewayWorker集群,Woker服务器产生大量TIME_WAIT?

提问walkor 回复了问题 • 2 人关注 • 3 个回复 • 622 次浏览 • 2017-11-28 14:12 • 来自相关话题

event-loop的区别?

提问walkor 回复了问题 • 2 人关注 • 1 个回复 • 554 次浏览 • 2017-08-21 17:53 • 来自相关话题

registerAddress端口号串了?

提问walkor 回复了问题 • 2 人关注 • 1 个回复 • 373 次浏览 • 2017-08-03 10:59 • 来自相关话题

如何在同个项目往多个不通的$registerAddress发送消息?

提问walkor 回复了问题 • 3 人关注 • 1 个回复 • 418 次浏览 • 2017-07-21 10:16 • 来自相关话题

Gateway,连接Redis写入,客户端多的情况下,是否会出现redis大量连接不上的可能性?

提问walkor 回复了问题 • 2 人关注 • 1 个回复 • 1131 次浏览 • 2017-06-28 16:03 • 来自相关话题

请问如何在gateway中的onConnect或onWebSocketConnect中获取client_id?

提问walkor 回复了问题 • 2 人关注 • 1 个回复 • 464 次浏览 • 2017-06-24 21:55 • 来自相关话题

如果有效的实时获得Gateway中的session,特别是当上万台设备连接的时候?

提问walkor 回复了问题 • 2 人关注 • 1 个回复 • 820 次浏览 • 2017-06-20 20:45 • 来自相关话题

Gateway进程中的connections数一直在上涨,但实际上没有新的客户端加进来。

提问xinxing 回复了问题 • 5 人关注 • 3 个回复 • 964 次浏览 • 2017-06-07 19:56 • 来自相关话题

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

提问walkor 回复了问题 • 4 人关注 • 4 个回复 • 1369 次浏览 • 2017-05-26 15:35 • 来自相关话题

最新版的为什么没有生成workerman.log和pid文件??

提问damao 回复了问题 • 2 人关注 • 2 个回复 • 630 次浏览 • 2017-05-23 14:24 • 来自相关话题

Gateway 配置ssl

提问walkor 回复了问题 • 2 人关注 • 3 个回复 • 832 次浏览 • 2017-05-02 11:11 • 来自相关话题

哪位朋友有 GatewayWorker 2.0.7版本的源码

回复

提问tshanchuan 回复了问题 • 1 人关注 • 1 个回复 • 397 次浏览 • 2017-04-05 12:46 • 来自相关话题

Gateway为什么只有一个客户端连接的情况下connections不止一个

提问walkor 回复了问题 • 2 人关注 • 1 个回复 • 1114 次浏览 • 2017-02-09 22:48 • 来自相关话题

GatewayClient调用失败

提问sharf 回复了问题 • 5 人关注 • 10 个回复 • 3192 次浏览 • 2017-01-27 00:15 • 来自相关话题

多个Application的情况下,如何关闭或重启其中某一个App

提问huxu1120 回复了问题 • 3 人关注 • 2 个回复 • 565 次浏览 • 2017-01-19 10:19 • 来自相关话题

请问下异步Mysql组件适用于GatewayWorker吗?

提问walkor 回复了问题 • 2 人关注 • 1 个回复 • 798 次浏览 • 2017-01-18 15:26 • 来自相关话题

条新动态, 点击查看
walkor

walkor 回答了问题 • 2015-06-23 22:47 • 2 个回复 不感兴趣

为啥不能自定义client_id

赞同来自:

实际上GatewayWorker 2.1.4之前的版本是支持自定义client_id的,但是出现了很多问题,后来改成不可自定义,并且全局自增。

client_id 用来全局标记一个socket连接,是一个全局自增的数值,由此可以精确控制向哪个socket连接... 显示全部 »
实际上GatewayWorker 2.1.4之前的版本是支持自定义client_id的,但是出现了很多问题,后来改成不可自定义,并且全局自增。

client_id 用来全局标记一个socket连接,是一个全局自增的数值,由此可以精确控制向哪个socket连接发送数据,由于client_id自增,即使向过期的client_id发送数据不会造成影响。

client_id交给开发者自定义,难免会导致client_id重复,而client_id重复,会导致部分socket失效或者断开,也无法确定向哪个socket连接发送数据,导致应用异常,而这样的异常很难排查。

举几个例子
1、聊天客户端与wm(GatewayWorker)建立连接,这时客户端突然断网然后重新发起一个连接,而在wm这边由于客户端异常断网,没立即收到连接断开的fin包,wm这边就有两个uid的连接,当wm终于检测到第一个连接断开时,会触发onClose($uid),这时可能会认为uid下线了,做一些下线处理操作,但是实际上这个uid还有一个连接,并没有下线,导致业务异常。

2、如果把client_id定义为uid,假设用户打开了两个socket连接,那么会导致其中的一个连接失效,无法收到数据,典型的例子是两个聊天室的连接id都是uid,则只有一个聊天室能收到消息,另外一个收不到消息,或者可能在这个聊天室给uid发送消息,但是另外一个聊天室也收到了。同样如果这个用户退出了其中的一个聊天室,onClose($uid)只能知道这个uid退出了,但是不知道退出的是哪个聊天室,导致业务编程困难。

3、如果把client_id定义为uid,无法实现多客户端通讯,像PC QQ 和手机QQ同时在线是需要两条socket连接的,必须需要分开标记的,如果都统一用uid,则无法针对某个客户端推送消息,也无法方便的判断消息是从哪个平台的客户端发来的。


如果client_id自定义不当,会引发逻辑错误,比如用户A上线后client_id为1,这时要向client_id为1的的连接发送数据,恰巧A用户还没收到数据就下线了,B用户上线,也被分配client_id=1,则会导致发给A用户的数据却发给了B,导致业务异常


client_id为自增并且短时间内不重复是非常必要的,而达到这点的client_id的值对于开发者来说也没有什么意义,反而交给开发者定义会出现很多不可预知的问题,并且很难排查。

关于和现有账号绑定问题,GatewayWorker后面会考虑增加一组接口,用来绑定uid与client_id的关系,在client_id下线时自动解绑,绑定关系存储在Gateway的内存中,不用读存储,效率很高。接口类似如下:
说明:
array Gateway::getClientIdByUid(mixed $uid);
返回一个数组,数组元素为与uid绑定的所有在线的client_id。如果没有在线的client_id则返回一个空数组。

此方法可以判断一个uid是否在线。

注... 显示全部 »
说明:
array Gateway::getClientIdByUid(mixed $uid);
返回一个数组,数组元素为与uid绑定的所有在线的client_id。如果没有在线的client_id则返回一个空数组。

此方法可以判断一个uid是否在线。

注意:返回值为与uid绑定的所有在线的client_id数组。因为已经下线的client_id会自动与uid解绑,所以已经下线的client_id不会出现在返回值中。

见手册
http://workerman.net/gatewaydoc/gateway-worker-development/get-client-id-by-uid.html

Gateway::sendToGroup是给某个用户组(这里是房间)的用户连接发送数据
Gateway::sendToCurrentClient是给当前用户连接发送数据。


1、先给当前房间所有在线用户广播(Gateway::sendToGroup... 显示全部 »

Gateway::sendToGroup是给某个用户组(这里是房间)的用户连接发送数据
Gateway::sendToCurrentClient是给当前用户连接发送数据。


1、先给当前房间所有在线用户广播(Gateway::sendToGroup)有人登录,浏览器收到login数据后将 展示到在线列表里面
2、给当前登录的用户单独放送(Gateway::sendToCurrentClient)在房间的


因为当前用户有个在线用户列表数据。而这个在线列表数据根本不需要发送给其它已经在线的用户,因为他们已经有了这份在线列表数据,只需要增量添加新用户即可。


在线用户列表数据可能会很大。例如2000人在线,每个用户记录大概50字节,那么这个列表体积可能在100KB左右。

如果这100KB数据广播给所有2000在线用户,那么将占用带宽2000*100KB=200MB=1.6Gbit,没错,需要1.6G的带宽。。。

如果是无差别的实时广播所有在线用户,2000人的聊天室每秒一次的用户登录/退出就轻松把带宽耗光了。


所以只给当前用户发送所有的在线用户列表,其他已经在线的用户只需要更新那一个上线的用户数据。
这就是为什么要分别发送。

GatewayWorker中client_id和uid之间的关系

提问walkor 回复了问题 • 5 人关注 • 4 个回复 • 2504 次浏览 • 2018-05-07 10:18 • 来自相关话题

在 event 里面 ,onmessage 里面如何 嵌入 thinkphp

提问walkor 回复了问题 • 3 人关注 • 5 个回复 • 1949 次浏览 • 2015-11-21 10:58 • 来自相关话题

为啥不能自定义client_id

提问walkor 回复了问题 • 2 人关注 • 2 个回复 • 2341 次浏览 • 2015-08-26 12:08 • 来自相关话题

gateway进程连接分配不平衡

回复

提问blogdaren 回复了问题 • 2 人关注 • 1 个回复 • 37 次浏览 • 4 天前 • 来自相关话题

Gateway中怎么把组跟uid绑定?

回复

提问WFD 发起了问题 • 1 人关注 • 0 个回复 • 60 次浏览 • 2018-11-21 16:04 • 来自相关话题

基于workerman框架的Gateway/Worker配合第三方框架下如何做websocket集群负载?

回复

提问walkor 回复了问题 • 2 人关注 • 1 个回复 • 113 次浏览 • 2018-11-12 16:12 • 来自相关话题

gateway框架中的Events中onMessage()中如何获取客户端ip?

回复

提问walkor 回复了问题 • 2 人关注 • 1 个回复 • 117 次浏览 • 2018-10-25 17:43 • 来自相关话题

急 thinkphp 使用gatewayclient 无法连接服务器

回复

提问walkor 回复了问题 • 4 人关注 • 6 个回复 • 625 次浏览 • 2018-08-29 14:23 • 来自相关话题

GatewayWorker 中如何 给作为客户端的AsyncTcpConnection 发送信息

回复

提问tufei 回复了问题 • 1 人关注 • 1 个回复 • 222 次浏览 • 2018-08-08 10:33 • 来自相关话题

session设置和获取的bug,如果session数组中存在一个二维数组 用updateSession函数对本链接更新那个二维数组会有bug

回复

提问walkor 回复了问题 • 3 人关注 • 1 个回复 • 251 次浏览 • 2018-08-03 11:04 • 来自相关话题

同一个用户登录不同设备,如何区分是移动端还是手机端

回复

提问wesley_li 回复了问题 • 2 人关注 • 2 个回复 • 625 次浏览 • 2018-07-17 10:54 • 来自相关话题

gateway总是在发送数据给客户端后tcp状态位发送FIN断开连接。

回复

提问walkor 回复了问题 • 2 人关注 • 1 个回复 • 263 次浏览 • 2018-06-19 16:33 • 来自相关话题

gatewayworker 有时候不进入worker

回复

提问six 回复了问题 • 2 人关注 • 1 个回复 • 216 次浏览 • 2018-06-11 10:22 • 来自相关话题

GateWay怎么使用证书。,用的text协议

回复

提问walkor 回复了问题 • 2 人关注 • 1 个回复 • 300 次浏览 • 2018-06-04 04:33 • 来自相关话题

按照文档分离mvc层写逻辑出现stream_socket_sendto(): Զ�����ǿ�ȹر��һ�����е���ӡ�

回复

提问bianchao1 回复了问题 • 5 人关注 • 5 个回复 • 807 次浏览 • 2018-05-29 15:32 • 来自相关话题

stream_socket_sendto(): Զ�����ǿ�ȹر��һ�����е���ӡ�

回复

提问bianchao1 回复了问题 • 6 人关注 • 6 个回复 • 1044 次浏览 • 2018-05-29 15:19 • 来自相关话题

Apache 反向代理 GatewayWorker 失败

回复

提问maq 回复了问题 • 2 人关注 • 2 个回复 • 261 次浏览 • 2018-05-16 18:37 • 来自相关话题

GatewayWorker中client_id和uid之间的关系

回复

提问walkor 回复了问题 • 5 人关注 • 4 个回复 • 2504 次浏览 • 2018-05-07 10:18 • 来自相关话题

心跳包设置pingNotResponseLimit后,客户端会断开

回复

提问walkor 回复了问题 • 5 人关注 • 4 个回复 • 1164 次浏览 • 2018-04-27 14:38 • 来自相关话题

20多个终端连接服务器后,服务器会出现延迟,终端断开后还会继续接收数据

回复

提问six 回复了问题 • 2 人关注 • 1 个回复 • 390 次浏览 • 2018-04-24 18:58 • 来自相关话题

服务器通过tcp长连接接收数据

回复

提问zhengweipx 回复了问题 • 2 人关注 • 2 个回复 • 737 次浏览 • 2018-04-24 14:15 • 来自相关话题

start_gateway.php里可以获取client_id吗?

回复

提问walkor 回复了问题 • 2 人关注 • 1 个回复 • 350 次浏览 • 2018-04-13 13:58 • 来自相关话题

如何在onWebSocketConnect回调中,获取client_id?

回复

提问JoeZing 回复了问题 • 2 人关注 • 4 个回复 • 1022 次浏览 • 2018-04-12 14:48 • 来自相关话题

分布式问题求助

回复

提问walkor 回复了问题 • 3 人关注 • 2 个回复 • 330 次浏览 • 2018-04-07 14:48 • 来自相关话题

gateway,无法查看status,显示not run。

回复

提问banice 回复了问题 • 1 人关注 • 1 个回复 • 394 次浏览 • 2017-12-18 08:49 • 来自相关话题

GatewayWorker报错SendBufferToWorker fail. May be the send buffer are overflow

回复

提问mingjian 回复了问题 • 2 人关注 • 2 个回复 • 570 次浏览 • 2017-12-15 15:40 • 来自相关话题

GatewayWorker集群,Woker服务器产生大量TIME_WAIT?

回复

提问walkor 回复了问题 • 2 人关注 • 3 个回复 • 622 次浏览 • 2017-11-28 14:12 • 来自相关话题

event-loop的区别?

回复

提问walkor 回复了问题 • 2 人关注 • 1 个回复 • 554 次浏览 • 2017-08-21 17:53 • 来自相关话题

registerAddress端口号串了?

回复

提问walkor 回复了问题 • 2 人关注 • 1 个回复 • 373 次浏览 • 2017-08-03 10:59 • 来自相关话题

如何在同个项目往多个不通的$registerAddress发送消息?

回复

提问walkor 回复了问题 • 3 人关注 • 1 个回复 • 418 次浏览 • 2017-07-21 10:16 • 来自相关话题

Gateway,连接Redis写入,客户端多的情况下,是否会出现redis大量连接不上的可能性?

回复

提问walkor 回复了问题 • 2 人关注 • 1 个回复 • 1131 次浏览 • 2017-06-28 16:03 • 来自相关话题

请问如何在gateway中的onConnect或onWebSocketConnect中获取client_id?

回复

提问walkor 回复了问题 • 2 人关注 • 1 个回复 • 464 次浏览 • 2017-06-24 21:55 • 来自相关话题

如果有效的实时获得Gateway中的session,特别是当上万台设备连接的时候?

回复

提问walkor 回复了问题 • 2 人关注 • 1 个回复 • 820 次浏览 • 2017-06-20 20:45 • 来自相关话题

Gateway进程中的connections数一直在上涨,但实际上没有新的客户端加进来。

回复

提问xinxing 回复了问题 • 5 人关注 • 3 个回复 • 964 次浏览 • 2017-06-07 19:56 • 来自相关话题

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

回复

提问walkor 回复了问题 • 4 人关注 • 4 个回复 • 1369 次浏览 • 2017-05-26 15:35 • 来自相关话题

最新版的为什么没有生成workerman.log和pid文件??

回复

提问damao 回复了问题 • 2 人关注 • 2 个回复 • 630 次浏览 • 2017-05-23 14:24 • 来自相关话题

Gateway 配置ssl

回复

提问walkor 回复了问题 • 2 人关注 • 3 个回复 • 832 次浏览 • 2017-05-02 11:11 • 来自相关话题

哪位朋友有 GatewayWorker 2.0.7版本的源码

回复

提问tshanchuan 回复了问题 • 1 人关注 • 1 个回复 • 397 次浏览 • 2017-04-05 12:46 • 来自相关话题

Gateway为什么只有一个客户端连接的情况下connections不止一个

回复

提问walkor 回复了问题 • 2 人关注 • 1 个回复 • 1114 次浏览 • 2017-02-09 22:48 • 来自相关话题

GatewayClient调用失败

回复

提问sharf 回复了问题 • 5 人关注 • 10 个回复 • 3192 次浏览 • 2017-01-27 00:15 • 来自相关话题

多个Application的情况下,如何关闭或重启其中某一个App

回复

提问huxu1120 回复了问题 • 3 人关注 • 2 个回复 • 565 次浏览 • 2017-01-19 10:19 • 来自相关话题

请问下异步Mysql组件适用于GatewayWorker吗?

回复

提问walkor 回复了问题 • 2 人关注 • 1 个回复 • 798 次浏览 • 2017-01-18 15:26 • 来自相关话题

为什么Gateway会主动关闭客户端?

回复

提问walkor 回复了问题 • 2 人关注 • 7 个回复 • 1484 次浏览 • 2017-01-07 22:31 • 来自相关话题

用workerman和layim做了个网站聊天插件 webim-plugin

案例479820787 发表了文章 • 0 个评论 • 174 次浏览 • 2018-11-06 15:00 • 来自相关话题

用workerman - gatewayworker 和layim做了个网站聊天插件,官网登录后右下角就会弹出聊天面板,含有手机端和PC端,含有完整的右键菜单功能。欢迎大家访问查看。 官网地址:https://www.implugin.cn ...查看全部
用workerman - gatewayworker 和layim做了个网站聊天插件,官网登录后右下角就会弹出聊天面板,含有手机端和PC端,含有完整的右键菜单功能。欢迎大家访问查看。
官网地址:https://www.implugin.cn
展示效果:

EA87D294-2317-47DE-A0AC-8ED9FDD11E0A.png