golang websocket 读取信息的时候被截断

使用x.net.websocket 读取信息,数据比较多,发现一次读取的时候不能读取完整。总是返回4092的长度,


func receiveWebsocket(ws *websocket.Conn) error {
    for {
        var msg = make([]byte, 1024*1200,1024*1200)
        
        m, err := ws.Read(msg)// m 的值总是4092
        if err != nil {
            log15.Error("ws read error", "error", err)
            return err
        }
        fmt.Println("长度---",m,string(msg))
        response := string(msg[:m])
        assignmentWebsocket(response)
    }
}

有人碰到过这个问题吗?谢谢

阅读 5.2k
1 个回答

使用了如下的方法可以争取读取:

func WebsocketCliet(url, protocol, origin string) {
   fmt.Println("Starting ws Client")
   //ws, err := websocket.Dial(fmt.Sprintf("ws://%s/ws", address), "", fmt.Sprintf("http://%s/", address))
   ws, err := websocket.Dial(url, protocol, origin)
   if err != nil {
      log15.Error("Dial failed: %s\n", "error",err.Error())

   }
   log15.Info("ws connected", "info", "success")
   go sendWSmessage(ws)
   go readWSMessage(ws)


}

func readWSMessage(ws *websocket.Conn)  error{
   for {
      var message string
      // err := websocket.JSON.Receive(ws, &message)
      err := websocket.Message.Receive(ws, &message)
      if err != nil {
         log15.Error("receiveWebsocket ","error", err)
         return err
      }
      assignmentWebsocket(message)
   }
}

func sendWSmessage(ws *websocket.Conn) error {
   for {

      select {
      case params := <-WebsocketParams:
         err := websocket.Message.Send(ws, params)
         if err != nil {
            log15.Error("ws send error", "error", err)
            return err
         }
      }

   }

}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题