UsherFall
UsherFall
> 由于目标serverId故障,当前用户触发重连,可能连接到了其他的serverId上,这个时候msg要去往的serverId是要改变的。 应该弄一个获取当前userId此刻在那个serverId上的方法即可,这样投递出去的消息是可达的 那比我想象的复杂好多,,这等于需要让connect的服务保持可用性?我看起来userId和serverId还是对应的关系
> 由于目标serverId故障,当前用户触发重连,可能连接到了其他的serverId上,这个时候msg要去往的serverId是要改变的。 应该弄一个获取当前userId此刻在那个serverId上的方法即可,这样投递出去的消息是可达的 再看了下发现昨天想错了!好像也没那么难,如果当前userId因为connect服务失效断开连接,然后再自主地去另一个connect服务身份认证的话,会把userId和serverId组成键值放到redis里。那这样的话在下面这个错误处理里再根据userId拿到serverId就可以了 ```go connectRpc, err := RClient.GetRpcClientByServerId(serverId) if err != nil { logrus.Infof("get rpc client err %v", err) } ``` 但又有点太简单,是差了啥东西吗
> 看不太懂,我理解是redis用string类型存userId和serverId的对应关系,那只要用userId去查询拿到的应该就是userId对应的最新的serverId
> > > > > > > > > 看不太懂,我理解是redis用string类型存userId和serverId的对应关系,那只要用userId去查询拿到的应该就是userId对应的最新的serverId > > 是这个意思 那按我上面说的那样改就可以吗?发起rpc请求错误后从redis里拿个severId再请求一次
> 可以,作为补偿机制吧 @LockGit 这个需要提个pr吗,要的话我测试下
@LockGit 感谢!还有一个问题是,readme里面给的在线demo要怎么登录啊,好像并没有看到登录选项,在线人数也一直为0
@LockGit 我在readme中有看到这个选项,但是打开http://45.77.108.245:8080/后,相同的位置上并没有该选项,换了浏览器也是一样
 浏览器是edge,刷新页面的时候那个登录注册的选项会闪一下然后就消失,用chrome也是这样
应该是,我clone下来运行也是同样的bug 不太懂前端,现在准备实习也没啥精力去学。。这任务还是交给别人吧
@LockGit 大佬。。提个报错问题,是关于tcp服务方面的,我是linux环境下一层层启动运行的,启动后运行stickpackage_test.go里面的Test_TcpClient,然后按流程完成了authToken认证,到了要发送room消息的时候发生错误,显示的是他在api层里call logic的PushRoom的时候有指针问题,然后panic,connect层退出 `LogicRpcClient.Call(context.Background(), "PushRoom", req, reply)` > panic: runtime error: invalid memory address or nil pointer dereference [signal SIGSEGV: segmentation violation code=0x1 addr=0x28 pc=0xc3ce19] goroutine 233 [running]: chat/api/rpc.(*RpcLogic).PushRoom(0xc0001fda00?, 0xc0005a85b0)...