Gateway

Gateway

3 回复

网页中建立ws连接时,如果传入了子协议就会提示连接失败,去掉子协议就可以连接成功

提问blogdaren 回复了问题 • 4 人关注 • 2021-07-14 16:22 • 来自相关话题

4 回复

gateway发送16进制序列

提问workerman_99 回复了问题 • 5 人关注 • 2021-07-13 09:35 • 来自相关话题

1 回复

gatewayWorker配置wss用的证书和项目域名的证书用的是同一个证书吗?

提问yongdao35 回复了问题 • 2 人关注 • 2021-05-08 10:00 • 来自相关话题

3 回复

bug: php8执行GatewayClient\Gateway::getAllGroupIdList();多次后,只能得到空数组

提问dignfei 回复了问题 • 2 人关注 • 2021-05-01 00:25 • 来自相关话题

3 回复

unserialize(): Error at offset 0 of 136 bytes in GatewayProtocol.php:211

提问Tinywan 回复了问题 • 2 人关注 • 2021-04-13 11:31 • 来自相关话题

2 回复

gatewoker busy和内存泄漏

提问keytehu 回复了问题 • 2 人关注 • 2021-03-19 20:13 • 来自相关话题

2 回复
1 回复

Gateway worker :使用 stop 命令 无法正常触发Event::onclose事件

提问walkor 回复了问题 • 2 人关注 • 2021-03-05 15:32 • 来自相关话题

1 回复

监听多个tcp端口,如何区分!

提问walkor 回复了问题 • 2 人关注 • 2020-12-16 14:38 • 来自相关话题

0 回复

聊天界面播放语音消息后,websocket就会断开连接

回复

提问echo_class 发起了问题 • 0 人关注 • 2020-12-04 16:44 • 来自相关话题

1 回复

远程启动成功后,客户端先提示连接成功,很快显示连接超时

回复

提问echo_class 回复了问题 • 1 人关注 • 2020-11-29 18:55 • 来自相关话题

1 回复

gatewayworker中php.ini文件内容解读

提问blogdaren 回复了问题 • 2 人关注 • 2020-11-26 22:38 • 来自相关话题

0 回复
2 回复

gatewayworker中能实现语音通话吗?不是语音消息

提问q13113671764 回复了问题 • 1 人关注 • 2020-11-21 16:24 • 来自相关话题

2 回复
2 回复

gatewayworker传参的要求是什么?字符串?JSON化数据?

提问echo_class 回复了问题 • 2 人关注 • 2020-11-20 21:33 • 来自相关话题

2 回复
1 回复

Gateway报一个奇怪的错

提问walkor 回复了问题 • 2 人关注 • 2020-10-18 23:50 • 来自相关话题

1 回复

无法成功设置心跳检测问题

提问walkor 回复了问题 • 3 人关注 • 2020-10-14 06:55 • 来自相关话题

2 回复

关于开了vpn等掉线的问题,求思路

提问九日 回复了问题 • 2 人关注 • 2020-09-22 12:12 • 来自相关话题

6 回复

gatewayworker如何实现硬件设备tcp与浏览器websocket互相通讯

提问敖德萨 回复了问题 • 8 人关注 • 2020-08-24 18:22 • 来自相关话题

1 回复

gateworker聊天室发送消息服务器不是100%返回

回复

提问 回复了问题 • 1 人关注 • 2020-08-14 20:56 • 来自相关话题

2 回复

请问各位大佬如何能打印出数据真实发出那一刻的时间戳

提问six 回复了问题 • 3 人关注 • 2020-08-07 15:42 • 来自相关话题

0 回复

gateway推送消息

回复

提问btsmememin 发起了问题 • 1 人关注 • 2020-07-27 16:06 • 来自相关话题

1 回复

gatewayworker如何保留特定的client_id

提问walkor 回复了问题 • 3 人关注 • 2020-07-22 16:42 • 来自相关话题

2 回复

gatewayworker的 Gateway::sendToUid($senduid,json_encode($data));发送消息会有不稳定性!??

提问敖德萨 回复了问题 • 2 人关注 • 2020-07-15 15:28 • 来自相关话题

4 回复

Gateway 配置ssl

提问ymb 回复了问题 • 1 人关注 • 2020-07-10 12:48 • 来自相关话题

5 回复

Gateway Worker进程内存不断上涨

提问scan_z 回复了问题 • 7 人关注 • 2020-07-09 12:02 • 来自相关话题

2 回复

发现大量用户触发onclose方法,这是怎么回事?

提问six 回复了问题 • 3 人关注 • 2020-06-15 10:03 • 来自相关话题

1 回复

TEXT协议传输一次性最大文本数据可以有多大?

提问blogdaren 回复了问题 • 2 人关注 • 2020-05-31 18:28 • 来自相关话题

1 回复

websocket分片发送需要考虑顺序吗?

提问blogdaren 回复了问题 • 2 人关注 • 2020-05-28 23:56 • 来自相关话题

4 回复

安装 workerman/http-client不成功怎么处理?

提问lixiaonan777 回复了问题 • 2 人关注 • 2020-05-07 20:53 • 来自相关话题

1 回复

laravel 整合Gateway 这个里面的registerAddress到底应该怎么写啊?!

提问blogdaren 回复了问题 • 2 人关注 • 2020-05-02 17:06 • 来自相关话题

1 回复

gatewayworker启动了,但是没有监听程序

提问blogdaren 回复了问题 • 2 人关注 • 2020-04-22 22:11 • 来自相关话题

3 回复

如何控制指定哪个进程来接收客户端连接?

提问dignfei 回复了问题 • 4 人关注 • 2020-03-18 17:00 • 来自相关话题

1 回复

GateWayWorker使用自定义协议怎么使用GateWay类? 分布式的设置有变化吗?

提问six 回复了问题 • 2 人关注 • 2020-03-18 14:45 • 来自相关话题

1 回复

刚接手一个Gateway做的项目,请问我该做些什么?

提问th 回复了问题 • 2 人关注 • 2020-03-14 12:10 • 来自相关话题

0 回复
1 回复

GatewayWorker处理数据是多线程的吗?

提问blogdaren 回复了问题 • 2 人关注 • 2020-02-27 18:17 • 来自相关话题

1 回复

gatewayworker 发送数据表速度过快客户端会掉线吗?

提问six 回复了问题 • 2 人关注 • 2020-02-09 12:13 • 来自相关话题

条新动态, 点击查看
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连接发送数据,导致应用异常,而这样的异常很难排查。

**一般开发者会想把client_id定义为uid,这样会导致业务处理困难或者业务异常。**举几个例子
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,则无法针对某个客户端推送消息,也无法方便的判断消息是从哪个平台的客户端发来的。

**即使不用uid标记client_id**
如果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的内存中,不用读存储,效率很高。接口类似如下:

Gateway::bindUid($client_id, $uid); // 将$client_id绑定到uid下,uid与client_id是一对多关系
Gateway:;sendToUid($msg, $uid); // 给这个uid下的所有链接发送数据
说明:
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::sendToCurrentClient是给当前用户连接发送数据。

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

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

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

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

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

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

GatewayWorker中client_id和uid之间的关系

提问walkor 回复了问题 • 5 人关注 • 2018-05-07 10:18 • 来自相关话题

5 回复

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

提问walkor 回复了问题 • 3 人关注 • 2019-10-30 14:39 • 来自相关话题

2 回复

为啥不能自定义client_id

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

3 回复
4 回复

gateway发送16进制序列

回复

提问workerman_99 回复了问题 • 5 人关注 • 2021-07-13 09:35 • 来自相关话题

1 回复

gatewayWorker配置wss用的证书和项目域名的证书用的是同一个证书吗?

回复

提问yongdao35 回复了问题 • 2 人关注 • 2021-05-08 10:00 • 来自相关话题

3 回复

bug: php8执行GatewayClient\Gateway::getAllGroupIdList();多次后,只能得到空数组

回复

提问dignfei 回复了问题 • 2 人关注 • 2021-05-01 00:25 • 来自相关话题

3 回复

unserialize(): Error at offset 0 of 136 bytes in GatewayProtocol.php:211

回复

提问Tinywan 回复了问题 • 2 人关注 • 2021-04-13 11:31 • 来自相关话题

2 回复

gatewoker busy和内存泄漏

回复

提问keytehu 回复了问题 • 2 人关注 • 2021-03-19 20:13 • 来自相关话题

2 回复
1 回复

Gateway worker :使用 stop 命令 无法正常触发Event::onclose事件

回复

提问walkor 回复了问题 • 2 人关注 • 2021-03-05 15:32 • 来自相关话题

1 回复

监听多个tcp端口,如何区分!

回复

提问walkor 回复了问题 • 2 人关注 • 2020-12-16 14:38 • 来自相关话题

0 回复

聊天界面播放语音消息后,websocket就会断开连接

回复

提问echo_class 发起了问题 • 0 人关注 • 2020-12-04 16:44 • 来自相关话题

1 回复

远程启动成功后,客户端先提示连接成功,很快显示连接超时

回复

提问echo_class 回复了问题 • 1 人关注 • 2020-11-29 18:55 • 来自相关话题

1 回复

gatewayworker中php.ini文件内容解读

回复

提问blogdaren 回复了问题 • 2 人关注 • 2020-11-26 22:38 • 来自相关话题

0 回复
2 回复

gatewayworker中能实现语音通话吗?不是语音消息

回复

提问q13113671764 回复了问题 • 1 人关注 • 2020-11-21 16:24 • 来自相关话题

2 回复
2 回复

gatewayworker传参的要求是什么?字符串?JSON化数据?

回复

提问echo_class 回复了问题 • 2 人关注 • 2020-11-20 21:33 • 来自相关话题

2 回复
1 回复

Gateway报一个奇怪的错

回复

提问walkor 回复了问题 • 2 人关注 • 2020-10-18 23:50 • 来自相关话题

1 回复

无法成功设置心跳检测问题

回复

提问walkor 回复了问题 • 3 人关注 • 2020-10-14 06:55 • 来自相关话题

2 回复

关于开了vpn等掉线的问题,求思路

回复

提问九日 回复了问题 • 2 人关注 • 2020-09-22 12:12 • 来自相关话题

6 回复

gatewayworker如何实现硬件设备tcp与浏览器websocket互相通讯

回复

提问敖德萨 回复了问题 • 8 人关注 • 2020-08-24 18:22 • 来自相关话题

1 回复

gateworker聊天室发送消息服务器不是100%返回

回复

提问 回复了问题 • 1 人关注 • 2020-08-14 20:56 • 来自相关话题

2 回复

请问各位大佬如何能打印出数据真实发出那一刻的时间戳

回复

提问six 回复了问题 • 3 人关注 • 2020-08-07 15:42 • 来自相关话题

0 回复

gateway推送消息

回复

提问btsmememin 发起了问题 • 1 人关注 • 2020-07-27 16:06 • 来自相关话题

1 回复

gatewayworker如何保留特定的client_id

回复

提问walkor 回复了问题 • 3 人关注 • 2020-07-22 16:42 • 来自相关话题

2 回复

gatewayworker的 Gateway::sendToUid($senduid,json_encode($data));发送消息会有不稳定性!??

回复

提问敖德萨 回复了问题 • 2 人关注 • 2020-07-15 15:28 • 来自相关话题

4 回复

Gateway 配置ssl

回复

提问ymb 回复了问题 • 1 人关注 • 2020-07-10 12:48 • 来自相关话题

5 回复

Gateway Worker进程内存不断上涨

回复

提问scan_z 回复了问题 • 7 人关注 • 2020-07-09 12:02 • 来自相关话题

2 回复

发现大量用户触发onclose方法,这是怎么回事?

回复

提问six 回复了问题 • 3 人关注 • 2020-06-15 10:03 • 来自相关话题

1 回复

TEXT协议传输一次性最大文本数据可以有多大?

回复

提问blogdaren 回复了问题 • 2 人关注 • 2020-05-31 18:28 • 来自相关话题

1 回复

websocket分片发送需要考虑顺序吗?

回复

提问blogdaren 回复了问题 • 2 人关注 • 2020-05-28 23:56 • 来自相关话题

4 回复

安装 workerman/http-client不成功怎么处理?

回复

提问lixiaonan777 回复了问题 • 2 人关注 • 2020-05-07 20:53 • 来自相关话题

1 回复

laravel 整合Gateway 这个里面的registerAddress到底应该怎么写啊?!

回复

提问blogdaren 回复了问题 • 2 人关注 • 2020-05-02 17:06 • 来自相关话题

1 回复

gatewayworker启动了,但是没有监听程序

回复

提问blogdaren 回复了问题 • 2 人关注 • 2020-04-22 22:11 • 来自相关话题

3 回复

如何控制指定哪个进程来接收客户端连接?

回复

提问dignfei 回复了问题 • 4 人关注 • 2020-03-18 17:00 • 来自相关话题

1 回复

GateWayWorker使用自定义协议怎么使用GateWay类? 分布式的设置有变化吗?

回复

提问six 回复了问题 • 2 人关注 • 2020-03-18 14:45 • 来自相关话题

1 回复

刚接手一个Gateway做的项目,请问我该做些什么?

回复

提问th 回复了问题 • 2 人关注 • 2020-03-14 12:10 • 来自相关话题

0 回复
1 回复

GatewayWorker处理数据是多线程的吗?

回复

提问blogdaren 回复了问题 • 2 人关注 • 2020-02-27 18:17 • 来自相关话题

1 回复

gatewayworker 发送数据表速度过快客户端会掉线吗?

回复

提问six 回复了问题 • 2 人关注 • 2020-02-09 12:13 • 来自相关话题