gochat icon indicating copy to clipboard operation
gochat copied to clipboard

想问一下task层中PushChannel和PushParams这两个结构的问题

Open UsherFall opened this issue 1 year ago • 11 comments

发现Push消息到对应用户的时候用到了如题的两个结构,而Push消息到room中却没有用到,那么这两个结构的意义是啥呢?为什么Push消息到用户的时候不要像PushRoom那样比较直接地去调用connect层服务呢?刚刚接触web,问题傻的话还请见谅。。。

UsherFall avatar Feb 25 '23 08:02 UsherFall

点对点通信的时候,起多个goroutine来推提高效率而已,放在一个goroutine里其实也行

pushChannel[rand.Int()%config.Conf.Task.TaskBase.PushChan] <- &PushParams{
			ServerId: m.ServerId,
			UserId:   m.UserId,
			Msg:      m.Msg,
		}

LockGit avatar Feb 25 '23 08:02 LockGit

@LockGit 感谢!还有一个问题是,readme里面给的在线demo要怎么登录啊,好像并没有看到登录选项,在线人数也一直为0

UsherFall avatar Feb 26 '23 06:02 UsherFall

打开后右上角有登录选项,账号可以自己注册 也可以用readme中的

LockGit avatar Feb 26 '23 08:02 LockGit

@LockGit 我在readme中有看到这个选项,但是打开http://45.77.108.245:8080/后,相同的位置上并没有该选项,换了浏览器也是一样

UsherFall avatar Feb 26 '23 09:02 UsherFall

浏览器兼容性?可以截图看看,mac系统下看到的就是和文档中截图的一样

LockGit avatar Feb 26 '23 09:02 LockGit

Snipaste_2023-02-26_17-14-57 浏览器是edge,刷新页面的时候那个登录注册的选项会闪一下然后就消失,用chrome也是这样

UsherFall avatar Feb 26 '23 09:02 UsherFall

那应该就是在windows下的前端页面bug

LockGit avatar Feb 26 '23 09:02 LockGit

前端是这个 https://github.com/LockGit/gochat-ui ,看能否帮忙修复下前端兼容性,提个pr

LockGit avatar Feb 26 '23 09:02 LockGit

应该是,我clone下来运行也是同样的bug 不太懂前端,现在准备实习也没啥精力去学。。这任务还是交给别人吧

UsherFall avatar Feb 26 '23 09:02 UsherFall

@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里。。看了很久看不出个所以然,还望解答

UsherFall avatar Feb 27 '23 14:02 UsherFall

在对照文档看看哪里有遗漏

LockGit avatar Feb 28 '23 16:02 LockGit