fix
This commit is contained in:
		
							parent
							
								
									6502f241ab
								
							
						
					
					
						commit
						d603cacd0b
					
				| @ -9,7 +9,7 @@ const ( | |||||||
| 	//ws连接成功 | 	//ws连接成功 | ||||||
| 	WEBSOCKET_CONNECT_SUCCESS = "WEBSOCKET_CONNECT_SUCCESS" | 	WEBSOCKET_CONNECT_SUCCESS = "WEBSOCKET_CONNECT_SUCCESS" | ||||||
| 	//请求恢复为上次连接的标识 | 	//请求恢复为上次连接的标识 | ||||||
| 	WEBSOCKET_REQUEST_RESUME_LAST_CONNECT = "WEBSOCKET_REQUEST_RESUME_LAST_CONNECT" | 	WEBSOCKET_REQUEST_REUSE_LAST_CONNECT = "WEBSOCKET_REQUEST_REUSE_LAST_CONNECT" | ||||||
| 	//请求恢复为上次连接的标识错误 | 	//请求恢复为上次连接的标识错误 | ||||||
| 	WEBSOCKET_REQUEST_RESUME_LAST_CONNECT_ERR = "WEBSOCKET_REQUEST_RESUME_LAST_CONNECT_ERR" | 	WEBSOCKET_REQUEST_RESUME_LAST_CONNECT_ERR = "WEBSOCKET_REQUEST_RESUME_LAST_CONNECT_ERR" | ||||||
| 	//渲染前数据组装 | 	//渲染前数据组装 | ||||||
|  | |||||||
| @ -154,8 +154,7 @@ func (l *DataTransferLogic) setConnPool(conn *websocket.Conn, userInfo auth.User | |||||||
| 	go func() { | 	go func() { | ||||||
| 		//把连接成功消息发回去 | 		//把连接成功消息发回去 | ||||||
| 		time.Sleep(time.Second * 2) //兼容下火狐 | 		time.Sleep(time.Second * 2) //兼容下火狐 | ||||||
| 		b := ws.respondDataFormat(constants.WEBSOCKET_CONNECT_SUCCESS, uniqueId) | 		ws.sendToOutChan(ws.respondDataFormat(constants.WEBSOCKET_CONNECT_SUCCESS, uniqueId)) | ||||||
| 		_ = conn.WriteMessage(websocket.TextMessage, b) |  | ||||||
| 	}() | 	}() | ||||||
| 	return ws | 	return ws | ||||||
| } | } | ||||||
| @ -304,7 +303,7 @@ func (w *wsConnectItem) respondDataFormat(msgType string, data interface{}) []by | |||||||
| func (w *wsConnectItem) dealwithReciveData(data []byte) { | func (w *wsConnectItem) dealwithReciveData(data []byte) { | ||||||
| 	var parseInfo websocket_data.DataTransferData | 	var parseInfo websocket_data.DataTransferData | ||||||
| 	if err := json.Unmarshal(data, &parseInfo); err != nil { | 	if err := json.Unmarshal(data, &parseInfo); err != nil { | ||||||
| 		logx.Error("invalid format of websocket message") | 		logx.Error("invalid format of websocket message:", err) | ||||||
| 		w.sendToOutChan(w.respondDataFormat(constants.WEBSOCKET_ERR_DATA_FORMAT, "invalid format of websocket message:"+string(data))) | 		w.sendToOutChan(w.respondDataFormat(constants.WEBSOCKET_ERR_DATA_FORMAT, "invalid format of websocket message:"+string(data))) | ||||||
| 		return | 		return | ||||||
| 	} | 	} | ||||||
| @ -315,8 +314,8 @@ func (w *wsConnectItem) dealwithReciveData(data []byte) { | |||||||
| 	case constants.WEBSOCKET_RENDER_IMAGE: | 	case constants.WEBSOCKET_RENDER_IMAGE: | ||||||
| 		w.renderImage(d) | 		w.renderImage(d) | ||||||
| 	//刷新重连请求恢复上次连接的标识 | 	//刷新重连请求恢复上次连接的标识 | ||||||
| 	case constants.WEBSOCKET_REQUEST_RESUME_LAST_CONNECT: | 	case constants.WEBSOCKET_REQUEST_REUSE_LAST_CONNECT: | ||||||
| 		w.resumeLateConnect(d) | 		w.reuseLastConnect(d) | ||||||
| 	default: | 	default: | ||||||
| 
 | 
 | ||||||
| 	} | 	} | ||||||
|  | |||||||
| @ -1,27 +0,0 @@ | |||||||
| package logic |  | ||||||
| 
 |  | ||||||
| import "fusenapi/constants" |  | ||||||
| 
 |  | ||||||
| // 刷新重连请求恢复上次连接的标识 |  | ||||||
| func (w *wsConnectItem) resumeLateConnect(data []byte) { |  | ||||||
| 	clientId := string(data) |  | ||||||
| 	//id长度不对 |  | ||||||
| 	if len(clientId) != 50 { |  | ||||||
| 		rsp := w.respondDataFormat(constants.WEBSOCKET_REQUEST_RESUME_LAST_CONNECT_ERR, "request id is invalid") |  | ||||||
| 		w.sendToOutChan(rsp) |  | ||||||
| 		return |  | ||||||
| 	} |  | ||||||
| 	publicMutex.Lock() |  | ||||||
| 	defer publicMutex.Unlock() |  | ||||||
| 	//存在是不能给他申请重新绑定 |  | ||||||
| 	if _, ok := mapConnPool.Load(clientId); ok { |  | ||||||
| 		rsp := w.respondDataFormat(constants.WEBSOCKET_REQUEST_RESUME_LAST_CONNECT_ERR, "id has bound by other connect ") |  | ||||||
| 		w.sendToOutChan(rsp) |  | ||||||
| 		return |  | ||||||
| 	} |  | ||||||
| 	//重新绑定 |  | ||||||
| 	w.uniqueId = clientId |  | ||||||
| 	rsp := w.respondDataFormat(constants.WEBSOCKET_CONNECT_SUCCESS, clientId) |  | ||||||
| 	w.sendToOutChan(rsp) |  | ||||||
| 	return |  | ||||||
| } |  | ||||||
							
								
								
									
										36
									
								
								server/websocket/internal/logic/ws_reuse_last_connect.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								server/websocket/internal/logic/ws_reuse_last_connect.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,36 @@ | |||||||
|  | package logic | ||||||
|  | 
 | ||||||
|  | import ( | ||||||
|  | 	"encoding/json" | ||||||
|  | 	"fusenapi/constants" | ||||||
|  | 	"github.com/zeromicro/go-zero/core/logx" | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | // 刷新重连请求恢复上次连接的标识 | ||||||
|  | func (w *wsConnectItem) reuseLastConnect(data []byte) { | ||||||
|  | 	logx.Info("收到请求恢复上次连接标识数据:", string(data)) | ||||||
|  | 	var clientId string | ||||||
|  | 	if err := json.Unmarshal(data, &clientId); err != nil { | ||||||
|  | 		logx.Error(" invalid format of client id :", clientId) | ||||||
|  | 		w.sendToOutChan(w.respondDataFormat(constants.WEBSOCKET_REQUEST_RESUME_LAST_CONNECT_ERR, "invalid format of client id")) | ||||||
|  | 		return | ||||||
|  | 	} | ||||||
|  | 	//id长度不对 | ||||||
|  | 	if len(clientId) > 100 { | ||||||
|  | 		w.sendToOutChan(w.respondDataFormat(constants.WEBSOCKET_REQUEST_RESUME_LAST_CONNECT_ERR, "length of client id is to long")) | ||||||
|  | 		return | ||||||
|  | 	} | ||||||
|  | 	publicMutex.Lock() | ||||||
|  | 	defer publicMutex.Unlock() | ||||||
|  | 	//存在是不能给他申请重新绑定 | ||||||
|  | 	if _, ok := mapConnPool.Load(clientId); ok { | ||||||
|  | 		rsp := w.respondDataFormat(constants.WEBSOCKET_REQUEST_RESUME_LAST_CONNECT_ERR, "id has bound by other connect ") | ||||||
|  | 		w.sendToOutChan(rsp) | ||||||
|  | 		return | ||||||
|  | 	} | ||||||
|  | 	//重新绑定 | ||||||
|  | 	w.uniqueId = clientId | ||||||
|  | 	rsp := w.respondDataFormat(constants.WEBSOCKET_CONNECT_SUCCESS, clientId) | ||||||
|  | 	w.sendToOutChan(rsp) | ||||||
|  | 	return | ||||||
|  | } | ||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user