跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 使用 websocket 发送数据给前端过段时间后后端程序卡死
未分類
14 9 月 2020

使用 websocket 发送数据给前端过段时间后后端程序卡死

使用 websocket 发送数据给前端过段时间后后端程序卡死

資深大佬 : swqslwl 3

后端程序启动后 120 秒左右就卡死了,无论推送速度是快还是慢,总是会卡死。没有任何报错信息。

后端用的是 go,gin 框架中开了 2 个协程,1 个用来接受数据,1 个用来入库和用 websocket 发给前端。

接受数据和数据库写入都没问题。应该就是 websocket 推给前端时的问题。也检查了协程数,都是正常的。

var upgrader = websocket.Upgrader{  // ReadBufferSize: 1024,  //WriteBufferSize: 1024,  // 允许所有的 CORS 跨域请求,正式环境可以关闭  CheckOrigin: func(r *http.Request) bool {   return true  }, } var dataTmp []byte  func init() {  http.HandleFunc("/ws", wsHandler) }  // 启动程序 func StartWebsocket(addrPort string) {  http.ListenAndServe(addrPort, nil) }  func(){     ...     go StartWebsocket("173.10.10.100:88")     ... }   func wsHandler(resp http.ResponseWriter, req *http.Request) {  // 答客户端告知升级连接为 websocket  wsSocket, err := upgrader.Upgrade(resp, req, nil)  if err != nil {   fmt.Println("升级为 websocket 失败", err.Error())   return  }  go wsWriteLoop(wsSocket) }  func wsWriteLoop(wsConn *websocket.Conn) {  for {   if len(dataTmp) != 0 {    fmt.Println(time.Now())    err := wsConn.WriteMessage(websocket.TextMessage, dataTmp)    dataTmp = dataTmp[0:0]    if err != nil {     fmt.Println("发送消息给客户端发生错误", err.Error())     wsConn.Close()     return    }   }  } } 

大佬有話說 (8)

  • 資深大佬 : ghjacky

    for 这样用合适吗,为啥不把 dataTmp 换成 channel 呢,for 配合 select 读 dataTmp 不好吗

  • 主 資深大佬 : swqslwl

    @ghjacky 不是很好,但感觉问题不是出在这

  • 資深大佬 : back0893

    dataTmp 的问题吧.
    一般来说你写的 loop 数据应该是隔离的,就算要共性,也需要加锁

  • 資深大佬 : kangsheng9527

    300 元帮你远程调试保证能找出问题并处理好。。。

  • 主 資深大佬 : swqslwl

    @ghjacky 老哥我错了,就是没用 channel 的问题。

  • 主 資深大佬 : swqslwl

    @back0893 是的是的,换了管道就好了。老哥可以详细说说这里使用切片和管道的区别吗?

  • 資深大佬 : JustDoIt221

    共享内存可见性问题

  • 主 資深大佬 : swqslwl

    @JustDoIt221 懂了懂了,太菜了,太久不写并发居然忘了这茬

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具