Closed jococi closed 4 years ago
@jococi sessionMap具体是指哪个变量成员?
@AlexStocks ` type EchoMessageHandler struct { handlers map[uint32]PackageHandler
rwlock sync.RWMutex
sessionMap map[getty.Session]*clientEchoSession//这个
} func newEchoMessageHandler() *EchoMessageHandler { handlers := make(map[uint32]PackageHandler) handlers[heartbeatCmd] = &HeartbeatHandler{} handlers[echoCmd] = &MessageHandler{}
return &EchoMessageHandler{sessionMap: make(map[getty.Session]*clientEchoSession), handlers: handlers}
}`
`type EchoMessageHandler struct { handlers map[uint32]PackageHandler
rwlock sync.RWMutex
sessionMap map[getty.Session]*clientEchoSession
}
func newEchoMessageHandler() *EchoMessageHandler { handlers := make(map[uint32]PackageHandler) handlers[heartbeatCmd] = &HeartbeatHandler{} handlers[echoCmd] = &MessageHandler{}
return &EchoMessageHandler{sessionMap: make(map[getty.Session]*clientEchoSession), handlers: handlers}
}`
每一个新的连接 都会创建EchoMessageHandler对象。sessionMap 的长度永远为1?
@jococi I will close it if no further question.
我在模仿tcp-echo服务的时候有一个关于SessionNumber的疑问: 当有新连接连接成功时:
func newSession(session getty.Session) error
被调用,对于getty.Session对象调用了SetEventListener方法,参数通过newEchoMessageHandler创建EchoMessageHandler。EchoMessageHandler中的sessionMap同时被初始化。此后func (h *EchoMessageHandler) OnOpen(session getty.Session)
被调用。而后续的新连接都会调用newEchoMessageHandler并创建自己的sessionMap。我理解的sessionMap应当是系统支持的最大连接数,这样设计是不是不合理。