diff --git a/src/framework/utils/ctx/ctx.go b/src/framework/utils/ctx/ctx.go index ff9efe0a..b2ba35d5 100644 --- a/src/framework/utils/ctx/ctx.go +++ b/src/framework/utils/ctx/ctx.go @@ -65,6 +65,11 @@ func IPAddrLocation(c *gin.Context) (string, string) { // Authorization 解析请求头 func Authorization(c *gin.Context) string { + // Query请求查询 + if authQuery, ok := c.GetQuery(token.RESPONSE_FIELD); ok && authQuery != "" { + return authQuery + } + // Header请求头 authHeader := c.GetHeader(token.HEADER_KEY) if authHeader == "" { return "" @@ -99,7 +104,15 @@ func UaOsBrowser(c *gin.Context) (string, string) { // AcceptLanguage 解析客户端接收语言 zh:中文 en: 英文 func AcceptLanguage(c *gin.Context) string { preferredLanguage := language.English - acceptLanguage := c.GetHeader("Accept-Language") + acceptLanguage := "en_US" + // Query请求查询 + if v, ok := c.GetQuery("lang"); ok && v != "" { + acceptLanguage = v + } + // Header请求头 + if v := c.GetHeader("Accept-Language"); v != "" { + acceptLanguage = v + } tags, _, _ := language.ParseAcceptLanguage(acceptLanguage) if len(tags) > 0 { preferredLanguage = tags[0] diff --git a/src/modules/ws/service/ws.impl.go b/src/modules/ws/service/ws.impl.go index 5add5595..46fa2866 100644 --- a/src/modules/ws/service/ws.impl.go +++ b/src/modules/ws/service/ws.impl.go @@ -31,6 +31,7 @@ type WSImpl struct{} // UpgraderWs http升级ws请求 func (s *WSImpl) UpgraderWs(w http.ResponseWriter, r *http.Request) *websocket.Conn { wsUpgrader := websocket.Upgrader{ + Subprotocols: []string{"omc-ws"}, // 设置消息发送缓冲区大小(byte),如果这个值设置得太小,可能会导致服务端在发送大型消息时遇到问题 WriteBufferSize: 1024, // 消息包启用压缩 @@ -61,7 +62,7 @@ func (s *WSImpl) NewClient(uid string, groupIDs []string, conn *websocket.Conn) BindUid: uid, SubGroup: groupIDs, MsgChan: make(chan []byte, 100), - StopChan: make(chan struct{}, 1), // 请求卡死循环标记 + StopChan: make(chan struct{}, 1), // 卡死循环标记 } // 存入客户端 @@ -111,10 +112,12 @@ func (s *WSImpl) clientRead(wsClient *model.WSClient) { s.CloseClient(wsClient.ID) return } + // 文本和二进制类型,只处理文本json if messageType == websocket.TextMessage { var reqMsg model.WSRequest err := json.Unmarshal(msg, &reqMsg) + // fmt.Println(messageType, string(msg)) if err != nil { msgByte, _ := json.Marshal(result.ErrMsg("message format not supported")) wsClient.MsgChan <- msgByte @@ -177,11 +180,13 @@ func (s *WSImpl) CloseClient(clientID string) { if clientIds, ok := WsUsers.Load(client.BindUid); ok { uidClientIds := clientIds.(*[]string) if len(*uidClientIds) > 0 { - for i, clientId := range *uidClientIds { - if clientId == client.ID { - *uidClientIds = append((*uidClientIds)[:i], (*uidClientIds)[i+1:]...) + tempClientIds := make([]string, 0, len(*uidClientIds)) + for _, v := range *uidClientIds { + if v != client.ID { + tempClientIds = append(tempClientIds, v) } } + *uidClientIds = tempClientIds } } } @@ -196,11 +201,13 @@ func (s *WSImpl) CloseClient(clientID string) { groupUIDs := uids.(*[]string) if len(*groupUIDs) > 0 { - for i, v := range *groupUIDs { - if v == client.BindUid { - *groupUIDs = append((*groupUIDs)[:i], (*groupUIDs)[i+1:]...) + tempUIDs := make([]string, 0, len(*groupUIDs)) + for _, v := range *groupUIDs { + if v != client.BindUid { + tempUIDs = append(tempUIDs, v) } } + *groupUIDs = tempUIDs } } } diff --git a/src/modules/ws/ws.go b/src/modules/ws/ws.go index e0ad3d1f..ee83ea3f 100644 --- a/src/modules/ws/ws.go +++ b/src/modules/ws/ws.go @@ -18,7 +18,7 @@ func Setup(router *gin.Engine) { { wsGroup.GET("", middleware.PreAuthorize(nil), - collectlogs.OperateLog(collectlogs.OptionNew("WS 订阅", collectlogs.BUSINESS_TYPE_OTHER)), + collectlogs.OperateLog(collectlogs.OptionNew("WS Subscription", collectlogs.BUSINESS_TYPE_OTHER)), controller.NewWSController.WS, )