如果在单机部属情况下想得到目前线上玩家的人数,该如何做?
发布于 19 天前 作者 shinjuwu 105 次浏览 来自 问答

如标题,我自己在看源码的时候,有看到源马在广播的时候有使用:

func (h *handler) BroadCast(topic string, body []byte) (int64,string) { var count int64=0 for _,agent:=range h.sessions.Items(){ e := agent.(gate.Agent).WriteMsg(topic, body) if e != nil { log.Warning(“WriteMsg error:”,e.Error()) } else { count++ } } return count,"" } 我是不是只要h.sessions.Items()由它下手即可取得总线上人数,还有因为这个方法是封闭的,在不修改底层代码的情况下,无法取得总玩家人数?感谢回答!

2 回复

考虑到gate可能会多进程部署的情况下,h.sessions.Itemes()也是获取不到总上线人数的。 建议总上线人数通过你自己管理的会话信息来取。

gate模块对外有一个监控接口,可以监控客户端连接和断开,在这个接口里面做一个变量加减就行了,注意并发锁就行

回到顶部