2016-08-31 8 views
0

プログラミング言語に移行するには新しいです、私はwebsocketでRedis PubSubを作成する必要があります。パブリッシュとサブスクリプションのために異なるルートにあるRedis PubSubを

マイ参照コードは、以下のライブラリ

"golang.org/x/net/websocket"

「github.com/garyburd/redigoを使用して、ここで https://github.com/vortec/orchestrate

アムです/ redis "

このようにすべてが機能していますが、「websocket.Handler」はわかりません(handleWSConnection)」を参照してください。 /ws-subscribeと/ ws-publishには2つの異なるgoルートが必要です。私はこのコンセプトで何か間違ったことを知らないのですか?

  1. を疑い、私はこの方法、http.HandleFuncを行うことができます( "/ WS"、handleWSConnection)//この方法を試してみましたが、 "handleWSConnectionへの呼び出しではない十分な議論を" 取得しています されていますhandleWSConnection()を通常の関数として呼び出す方法はありません。

  2. 任意の提案異なる行くルートとして/ WS-パブリッシュを作成する方法を

次のように、次の完了

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

私のコードですが、私は知らないそれが適切ですこれを行う方法

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) 
} 
関連する問題