sockjs: session not in open state
lcp0578 opened this issue · 3 comments
lcp0578 commented
when i use websocket not sockjs, i'm confused,
2020/11/18 19:16:14.854 [D] [asm_amd64.s:1373] A new sockjs session established ...
2020/11/18 19:16:14.854 [D] [asm_amd64.s:1373] l1kg4bq2
2020/11/18 19:16:14.854 [D] [asm_amd64.s:1373] &{{0 0} l1kg4bq2 1 0xc000020190 [] 0xc000010018 0xc000010020 0xc0000761e0 0xc00040a180 5000000000 25000000000 0xc0004180f0 0xc0000741e0}
&{{0 0} l1kg4bq2 1 0xc000020190 [] 0xc000010018 0xc000010020 0xc0000761e0 0xc00040a180 5000000000 25000000000 0xc0004180f0 0xc0000741e0}
****************
****************
2020/11/18 19:16:14.866 [E] [handler.go:31] sockjs: session not in open state
2020-11-18T19:16:14.866+0800 ERROR logger/zap.go:31 [session error]
git.sxjicheng.com/jicheng/trend_wsim/logger.Error
/Users/lcp0578/go/src/git.sxjicheng.com/jicheng/trend_wsim/logger/zap.go:31
github.com/lcp0578/trend_wsim/websocket.initConnection
/Users/lcp0578/go/src/git.sxjicheng.com/jicheng/trend_wsim/websocket/handler.go:258
github.com/lcp0578/trend_wsim/websocket.Handler
/Users/lcp0578/go/src/git.sxjicheng.com/jicheng/trend_wsim/websocket/handler.go:31
2020/11/18 19:16:14.866 [D] [asm_amd64.s:1373] init
go
handler := sockjs.NewHandler("/ws", sockjs.DefaultOptions, websocket.Handler)
func Handler(session sockjs.Session) {
logs.Debug("A new sockjs session established ...")
logs.Debug(session.ID())
logs.Debug(session)
sessionId := session.ID()
if sessionId == "" {
logs.Error("session id error")
return
}
//inline
key, err := initConnection(session)
logs.Debug("init")
logs.Debug(key)
logs.Debug(err)
if err != nil {
logs.Error(err)
return
}
//offline
defer closeConnect(key, sessionId)
// sub message
go subMessage(session, sessionId, key)
for {
if msg, err := session.Recv(); err == nil {
messageCenter(msg, session)
continue
}
break
}
}
func initConnection(session sockjs.Session) (key string, err error) {
msg, err := session.Recv()
if err != nil {
logs.Error(err)
logger.Error("session error")
return
}
logger.Debug("init msg")
logger.Debug(msg)
recvMsg, err := decodeMsg(msg)
logger.Debug(recvMsg)
if err != nil {
return
}
if recvMsg.Type != "connection" && recvMsg.Type != "reconnection" {
return "", errors.New("init connection type error")
}
key = strconv.Itoa(recvMsg.FromType) + "_" + strconv.Itoa(recvMsg.Data.Mine.Id) + "_" + strconv.Itoa(recvMsg.ToType) + "_" + strconv.Itoa(recvMsg.Data.To.Id)
logger.Debug(key)
chat.SetUserMap(key, session.ID())
logger.Debug("set user map")
return
}
uni-app:
uni.connectSocket({
url:"ws://127.0.0.1:8088/ws/92/l1kg4bq2/websocket",
header:{
"Connection": "Upgrade",
//"Sec-WebSocket-Accept": "J04QneyO/SnbBD1HyZJePaOLoFA=",
"Upgrade": "websocket"
},
complete: function(res) {
console.log(res);
},
success:function(res){
console.log(res);
console.log('WebSocket success!');
}
});
lcp0578 commented
the func initConnection msg, err := session.Recv()
return the error: "sockjs: session not in open state"
lcp0578 commented
I use "gopkg.in/igm/sockjs-go.v2/sockjs"
skh2015java commented
The message type must be []string, if not the session will close and report error ‘session not in open state‘