如题,就说我在a直播间发得评论,会在b直播间显示,但不是每次都这样,只会偶尔出现这样得情况,会不会是因为我进入a直播间得时候,用到了joinGroup,然后离开得时候我没写leaveGroup(这块离开的时候不是框架自动执行嘛,所以就没写),然后当离开a直播间后,迅速点击进入b直播间,然后b直播间得长连接还没来得及返回,或者网络慢得原因,导致系统没有自动执行leaveGroup,这样导致我虽然在b直播间,但是我发评论什么得还是在a直播间
不知道你是怎么区分是给a直播间还是b直播间发的。我们是进入直播间a的时候,前端记录一个标记,当前是a直播间,然后发消息的时候带上这个标记,服务端根据这个标记sendToGroup(a, 消息)给a直播间发消息,这样保证给a发的消息不会发到其它房间。基于这个机制我们还从没乱过。另外手册说连接断开自动执行leaveGroup,我不清楚你触发自动执行是通过断开连接?如果不是的话你需要调用leaveGroup来离开房间,不然可能会收到其它房间的消息。如果你不好做leaveGroup,有个变通的方法,sendToGroup发出去的消息把房间号带上,客户端发现当前标记的房间号和服务端发来的不一致就不显示。
下面是分布式配置和代码部分
两台服务器代码一样,只粘贴一份代码
就是用户进入a直播间,会提示用户进入了a直播间,但同时也会显示在b直播间,也就是b直播间也会提示用户进入了直播间,评论也是如此,会在每个直播间都显示,不知道问题出在了哪?
还有一个情况,就是前端将用户的client_id存的死的,也就是用户第一次得到了client_id,如果后面没再次获取到新的client_id,则该用户会始终使用这个client_id,除非获取到了新的才会覆盖之前的client_id,会不会是这个原因导致的呢
你的代码明显有bug,只有joinGroup,没有leaveGroup。当然会乱了
leaveGroup不是在离开后,框架会自动执行嘛
没看到哪里有说
http://doc2.workerman.net/leave-group.html 注意:当client_id下线(连接断开)时,client_id会自动从它所属的各个分组中删除,也就是说无需在onClose回调中调用Gateway::leaveGroup
连接断开时会从组内删除,关键是你确认你每次加入新的组之前都有断开连接么?
不知道你是怎么区分是给a直播间还是b直播间发的。我们是进入直播间a的时候,前端记录一个标记,当前是a直播间,然后发消息的时候带上这个标记,服务端根据这个标记sendToGroup(a, 消息)给a直播间发消息,这样保证给a发的消息不会发到其它房间。基于这个机制我们还从没乱过。另外手册说连接断开自动执行leaveGroup,我不清楚你触发自动执行是通过断开连接?如果不是的话你需要调用leaveGroup来离开房间,不然可能会收到其它房间的消息。如果你不好做leaveGroup,有个变通的方法,sendToGroup发出去的消息把房间号带上,客户端发现当前标记的房间号和服务端发来的不一致就不显示。
下面是分布式配置和代码部分
两台服务器代码一样,只粘贴一份代码
就是用户进入a直播间,会提示用户进入了a直播间,但同时也会显示在b直播间,也就是b直播间也会提示用户进入了直播间,评论也是如此,会在每个直播间都显示,不知道问题出在了哪?
还有一个情况,就是前端将用户的client_id存的死的,也就是用户第一次得到了client_id,如果后面没再次获取到新的client_id,则该用户会始终使用这个client_id,除非获取到了新的才会覆盖之前的client_id,会不会是这个原因导致的呢
你的代码明显有bug,只有joinGroup,没有leaveGroup。当然会乱了
leaveGroup不是在离开后,框架会自动执行嘛
没看到哪里有说
http://doc2.workerman.net/leave-group.html
注意:当client_id下线(连接断开)时,client_id会自动从它所属的各个分组中删除,也就是说无需在onClose回调中调用Gateway::leaveGroup
连接断开时会从组内删除,关键是你确认你每次加入新的组之前都有断开连接么?