gochat
gochat copied to clipboard
想问一下task层中PushChannel和PushParams这两个结构的问题
发现Push消息到对应用户的时候用到了如题的两个结构,而Push消息到room中却没有用到,那么这两个结构的意义是啥呢?为什么Push消息到用户的时候不要像PushRoom那样比较直接地去调用connect层服务呢?刚刚接触web,问题傻的话还请见谅。。。
点对点通信的时候,起多个goroutine来推提高效率而已,放在一个goroutine里其实也行
pushChannel[rand.Int()%config.Conf.Task.TaskBase.PushChan] <- &PushParams{
ServerId: m.ServerId,
UserId: m.UserId,
Msg: m.Msg,
}
@LockGit 感谢!还有一个问题是,readme里面给的在线demo要怎么登录啊,好像并没有看到登录选项,在线人数也一直为0
打开后右上角有登录选项,账号可以自己注册 也可以用readme中的
@LockGit 我在readme中有看到这个选项,但是打开http://45.77.108.245:8080/后,相同的位置上并没有该选项,换了浏览器也是一样
浏览器兼容性?可以截图看看,mac系统下看到的就是和文档中截图的一样
浏览器是edge,刷新页面的时候那个登录注册的选项会闪一下然后就消失,用chrome也是这样
那应该就是在windows下的前端页面bug
前端是这个 https://github.com/LockGit/gochat-ui ,看能否帮忙修复下前端兼容性,提个pr
应该是,我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) /home/usher/chat/api/rpc/rpc.go:111 +0xb9 chat/connect.(*Connect).readDataFromTcp(0xc00029e090, 0xc0004b00e0, 0xc000533c40) /home/usher/chat/connect/server_tcp.go:198 +0x6f9 created by chat/connect.(*Connect).ServeTcp /home/usher/chat/connect/server_tcp.go:93 +0x17d
但同时看到task层,它是有从redis队列中取到消息的,只是redisMsg里面的Msg切片为空,然后在call connect的时候报错
logrus.Infof("broadcastRoomToConnect rpc %v", rpc)
logrus.Infof("pushRoomReq: %v", pushRoomMsgReq)
rpc.Call(context.Background(), "PushRoomMsg", pushRoomMsgReq, reply)
logrus.Infof("reply %s", reply.Msg)
INFO[0019] push msg info 1,op is:3
INFO[0019] broadcastRoomToConnect rpc &{2 0 map[] {{0 0} {} map[] 0} ConnectRpc { 3 60000000000 /rpcx 1000000000 0 10000000 3 0 false 0 30000000000 60000000000 false} {{0 0} 0 0 0 0} map[[email protected]:6914:] map[] 0xc000148820 0xc00012f608 {{0 0} map[]} false 0xc00012f620 } INFO[0019] pushRoomReq: &{1 {1 3 1630203259832504320 []}} 2023/02/27 21:48:39 client.go:744: ERROR: rpcx: client protocol error: read tcp 127.0.0.1:36160->127.0.0.1:6914: read: connection reset by peer
这就非常让人疑惑了。。首先,为什么call logic的PushRoom会出错,传入的两个参数应该都没问题才对,其次既然在这里panic了的话为什么logic层又会生成消息推进redis里。。看了很久看不出个所以然,还望解答
在对照文档看看哪里有遗漏