AlexStocks / getty

a netty like asynchronous network I/O library based on tcp/udp/websocket; a bidirectional RPC framework based on JSON/Protobuf; a microservice framework based on zookeeper/etcd
Apache License 2.0
886 stars 184 forks source link

关于SessionNumber的疑问 #18

Closed jococi closed 4 years ago

jococi commented 5 years ago

我在模仿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应当是系统支持的最大连接数,这样设计是不是不合理。

AlexStocks commented 5 years ago

@jococi sessionMap具体是指哪个变量成员?

jococi commented 5 years ago

@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}

}`

jococi commented 5 years ago

`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?

wongoo commented 5 years ago

@jococi I will close it if no further question.