igm/sockjs-go

sockjs: session not in open state

lcp0578 opened this issue · 3 comments

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!');
						
					}
				});

the func initConnection msg, err := session.Recv() return the error: "sockjs: session not in open state"

I use "gopkg.in/igm/sockjs-go.v2/sockjs"

The message type must be []string, if not the session will close and report error ‘session not in open state‘