是编程语言的新手,我需要使用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需要两个不同的go路由。我不知道这个概念有什么不对吗?
怀疑
我可以这样做,http.HandleFunc(" / ws",handleWSConnection)//尝试这种方式但是在调用handleWConnection时没有足够的参数" 有没有办法调用" handleWSConnection()"作为正常功能。
有关如何将/ ws-publish写为不同的路线的任何建议
以下是我的代码
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)
}
}
答案 0 :(得分:0)
完成以下方式,我不知道这是正确的方法吗
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)
}