uid绑定

uid绑定

知道$client_name能够获取$client_id吗?求教

提问匿名用户 回复了问题 • 2 人关注 • 2 个回复 • 1128 次浏览 • 2016-04-07 14:29 • 来自相关话题

workerman调用bindUid uid和client_id映射的数据保存在哪里呢?没找到

提问walkor 回复了问题 • 2 人关注 • 1 个回复 • 1773 次浏览 • 2016-03-29 16:56 • 来自相关话题

client_id怎么和我的用户表id联系起来呢?

提问walkor 回复了问题 • 2 人关注 • 1 个回复 • 1485 次浏览 • 2016-03-24 21:51 • 来自相关话题

tcp短线重连时候不能正常连上gatewayWorker

提问walkor 回复了问题 • 2 人关注 • 1 个回复 • 1135 次浏览 • 2016-03-23 18:21 • 来自相关话题

关于用户ID与workerman自动生成的client_id映射

提问annydaniel 回复了问题 • 5 人关注 • 4 个回复 • 14209 次浏览 • 2016-03-15 17:31 • 来自相关话题

断网后uid重新绑定问题

提问walkor 回复了问题 • 2 人关注 • 1 个回复 • 1691 次浏览 • 2016-03-11 13:57 • 来自相关话题

浏览器给智能硬件发信息 通过bindUID

提问walkor 回复了问题 • 3 人关注 • 1 个回复 • 1161 次浏览 • 2016-03-11 13:39 • 来自相关话题

gateway 如何通过 client_id 查看 哪个uid绑定了,以及 哪个group绑定了的

提问walkor 回复了问题 • 1 人关注 • 1 个回复 • 1360 次浏览 • 2015-11-25 20:23 • 来自相关话题

问关于Gateway::bindUid的多次绑定

提问魅籽 回复了问题 • 1 人关注 • 6 个回复 • 1340 次浏览 • 2015-11-18 17:02 • 来自相关话题

问一个关于bindUid和sendToUid的问题

提问walkor 回复了问题 • 1 人关注 • 1 个回复 • 1381 次浏览 • 2015-11-18 13:53 • 来自相关话题

为啥不能自定义client_id

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

workerman 实现不同用户推送不同消息问题

提问walkor 回复了问题 • 2 人关注 • 1 个回复 • 6130 次浏览 • 2015-07-31 18:01 • 来自相关话题

gateway自己实现bindUid遇到的问题和解决方案

提问walkor 回复了问题 • 2 人关注 • 1 个回复 • 1597 次浏览 • 2015-07-27 21:43 • 来自相关话题

Gateway::bindUid和Gateway::sendToAll新接口问题

提问walkor 回复了问题 • 2 人关注 • 1 个回复 • 1640 次浏览 • 2015-07-27 12:30 • 来自相关话题

现在我是用Gateway/workerman的text协议的,我该怎样影射生成的client_id到我需要uid呢?

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

关于workerman-chat的client_id

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

如何自定义client_id??

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

请问$client_id实在哪里自动生成

提问walkor 回复了问题 • 3 人关注 • 2 个回复 • 1830 次浏览 • 2015-07-26 15:25 • 来自相关话题

条新动态, 点击查看
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的内存中,不用读存储,效率很高。接口类似如下:

为啥不能自定义client_id

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

知道$client_name能够获取$client_id吗?求教

回复

提问匿名用户 回复了问题 • 2 人关注 • 2 个回复 • 1128 次浏览 • 2016-04-07 14:29 • 来自相关话题

workerman调用bindUid uid和client_id映射的数据保存在哪里呢?没找到

回复

提问walkor 回复了问题 • 2 人关注 • 1 个回复 • 1773 次浏览 • 2016-03-29 16:56 • 来自相关话题

client_id怎么和我的用户表id联系起来呢?

回复

提问walkor 回复了问题 • 2 人关注 • 1 个回复 • 1485 次浏览 • 2016-03-24 21:51 • 来自相关话题

tcp短线重连时候不能正常连上gatewayWorker

回复

提问walkor 回复了问题 • 2 人关注 • 1 个回复 • 1135 次浏览 • 2016-03-23 18:21 • 来自相关话题

关于用户ID与workerman自动生成的client_id映射

回复

提问annydaniel 回复了问题 • 5 人关注 • 4 个回复 • 14209 次浏览 • 2016-03-15 17:31 • 来自相关话题

断网后uid重新绑定问题

回复

提问walkor 回复了问题 • 2 人关注 • 1 个回复 • 1691 次浏览 • 2016-03-11 13:57 • 来自相关话题

浏览器给智能硬件发信息 通过bindUID

回复

提问walkor 回复了问题 • 3 人关注 • 1 个回复 • 1161 次浏览 • 2016-03-11 13:39 • 来自相关话题

gateway 如何通过 client_id 查看 哪个uid绑定了,以及 哪个group绑定了的

回复

提问walkor 回复了问题 • 1 人关注 • 1 个回复 • 1360 次浏览 • 2015-11-25 20:23 • 来自相关话题

问关于Gateway::bindUid的多次绑定

回复

提问魅籽 回复了问题 • 1 人关注 • 6 个回复 • 1340 次浏览 • 2015-11-18 17:02 • 来自相关话题

问一个关于bindUid和sendToUid的问题

回复

提问walkor 回复了问题 • 1 人关注 • 1 个回复 • 1381 次浏览 • 2015-11-18 13:53 • 来自相关话题

为啥不能自定义client_id

回复

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

workerman 实现不同用户推送不同消息问题

回复

提问walkor 回复了问题 • 2 人关注 • 1 个回复 • 6130 次浏览 • 2015-07-31 18:01 • 来自相关话题

gateway自己实现bindUid遇到的问题和解决方案

回复

提问walkor 回复了问题 • 2 人关注 • 1 个回复 • 1597 次浏览 • 2015-07-27 21:43 • 来自相关话题

Gateway::bindUid和Gateway::sendToAll新接口问题

回复

提问walkor 回复了问题 • 2 人关注 • 1 个回复 • 1640 次浏览 • 2015-07-27 12:30 • 来自相关话题

现在我是用Gateway/workerman的text协议的,我该怎样影射生成的client_id到我需要uid呢?

回复

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

关于workerman-chat的client_id

回复

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

如何自定义client_id??

回复

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

请问$client_id实在哪里自动生成

回复

提问walkor 回复了问题 • 3 人关注 • 2 个回复 • 1830 次浏览 • 2015-07-26 15:25 • 来自相关话题