gpt4 book ai didi

Go lang Redis PubSub 在不同的 go 路由中用于发布和订阅

转载 作者:可可西里 更新时间:2023-11-01 11:32:08 25 4
gpt4 key购买 nike

我是 Go 编程语言的新手,我需要使用 websocket 创建 Redis PubSub。

我的引用代码在这里 https://github.com/vortec/orchestrate

我正在使用以下库

“golang.org/x/net/websocket”

“github.com/garyburd/redigo/redis”

一切都以这种方式为我工作,但我不明白这里的“websocket.Handler(handleWSConnection)”是什么。/ws-subscribe 和/ws-publish 我需要 2 条不同的路径。我不知道这个概念有什么问题吗?

疑问

  1. 我可以这样做吗,http.HandleFunc("/ws", handleWSConnection)//尝试过这种方式,但“在调用 handleWSConnection 时得到的参数不足”有什么方法可以将“handleWSConnection()”作为普通函数调用。

  2. 关于如何将/ws-publish 写成不同的 go 路由的任何建议

以下是我的代码

main function 
func (wsc *WSConnection) ReadWebSocket() {
for {
var json_data []byte
var message WSMessage

// Receive data from WebSocket
err := websocket.Message.Receive(wsc.socket, &json_data)
if err != nil {
return
}

// Parse JSON data
err = json.Unmarshal(json_data, &message)
if err != nil {
return
}
switch message.Action {
case "SUBSCRIBE":
wsc.subscribe.Subscribe(message.Channel)
case "UNSUBSCRIBE":
wsc.subscribe.Unsubscribe(message.Channel)
case "PUBLISH":
wsc.publish.Conn.Do("PUBLISH", message.Channel, message.Data)
}
}
}
func handleWSConnection(socket *websocket.Conn) {
wsc := &WSConnection {socket: socket}
defer wsc.Uninitialize()
wsc.Initialize()
go wsc.ProxyRedisSubscribe()
wsc.ReadWebSocket()
}
func serveWeb() {
http.Handle("/ws", websocket.Handler(handleWSConnection)) // I need to call this route as funciton
if err := http.ListenAndServe(":9000", nil); err != nil {
log.Fatal("ListenAndServe:", err)
}
}

最佳答案

按照以下方式完成,我不知道这样做是否正确

http.HandleFunc("/publish", publishHandler)


func publishHandler(conn http.ResponseWriter, req *http.Request) {
log.Println("PUBLISH HANDLER")
wsHandler := websocket.Handler(func(ws *websocket.Conn) {
handleWSConnection(ws)
})
wsHandler.ServeHTTP(conn, req)
}

关于Go lang Redis PubSub 在不同的 go 路由中用于发布和订阅,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39241077/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com