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

标签 go websocket redis publish-subscribe

我是 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/

相关文章:

redis - SUNION 错误的结果顺序

redis - 如何使用 txredis 编写用于客户端服务器通信的异步扭曲应用程序

go - 在 Go 中扩展结构

xml - 通过 UnMarshal 和 MarshalIndent 往返 xml

Javascript 客户端不会持续监听 Flask-SocketIO

javascript - 在闭包中设置变量

c++ - 如何在 Visual C++ 中使用开源 C 库

mongodb - 同步应用程序

pointers - golang 中的 slice 杂耍

go - 什么是正确的 ZMQ 模式?