返回

go-将来自 kafka 的消息发送到 websocket

发布时间:2022-03-24 15:48:45 557
# css

我在golang用gin框架创建了一个web服务。在这个项目中,我还使用了一些来自特定主题的卡夫卡信息。我试图实现的是将我从主题中收到的信息倾诉到websocket中。因此,通信只有一种方式,超过一个人可以连接到web套接字,并看到传入的消息。我想使用channel,所以在接收卡夫卡消息的函数中,我有如下内容:

ch <- KafkaMessage

在gin框架中,我创建了如下内容:

requestRouterRPCv1.GET("wf-live", wsWorkFlowLive)

func wsWorkFlowLive(c *gin.Context) {
    ws, err := upGrader.Upgrade(c.Writer, c.Request, nil)
    if err != nil {
        log.Println("error get connection")
        log.Fatal(err)
    }
    defer ws.Close()

    err = ws.WriteJSON(<-ch)

    if err != nil {
        log.Println("error write message: " + err.Error())
    }
}

var upGrader = websocket.Upgrader{
    CheckOrigin: func(r *http.Request) bool {
        return true
    },
}

这里是我用来测试websocket的html片段:

   
     
       
       index
    
     
       

test websocket

但我错过了一些东西,我是一个新手,因为一旦我收到卡夫卡的第一条信息,我就有以下错误行为:

  1. 连接快速关闭后,只显示第一条消息
  2. 要查看第二个,我必须刷新页面,这不是websocket的方式
  3. 因为连接是关闭的,所以它不是红色的,所以在我读到它之前,它一直被卡在cosume函数中。我不能有这种行为
  4. 为了避免第3点,我认为我必须有一种机制,只有当一个或多个ws连接时,我才会将消息发送到通道。
特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报
评论区(0)
按点赞数排序
用户头像