duanjian5059 2015-09-23 17:21
浏览 70
已采纳

我需要使用go lang连接到现有的websocket服务器

Theres a websocket running in my localhost on ws://localhost:8080/ws

I need go lang code that can create a websocket client and connect to this server.

My Google-Fu skills failed to teach me a simple way to do this.

Thank you.

  • 写回答

2条回答 默认 最新

  • douqiandai4327 2015-09-23 18:11
    关注

    Nevermind I found some helping code online. Now my code looks like this in case someone else needs this:

    package main
    
    import (
            "net/http"
            "text/template"
            "code.google.com/p/go.net/websocket"
            "fmt"
            "os"
            "time"
    )
    
    
    const address string = "localhost:9999"
    
    func main() {
    
        initWebsocketClient()
    }
    
    
    func initWebsocketClient() {
        fmt.Println("Starting Client")
        ws, err := websocket.Dial(fmt.Sprintf("ws://%s/ws", address), "", fmt.Sprintf("http://%s/", address))
        if err != nil {
            fmt.Printf("Dial failed: %s
    ", err.Error())
            os.Exit(1)
        }
        incomingMessages := make(chan string)
        go readClientMessages(ws, incomingMessages)
        i := 0
        for {
            select {
            case <-time.After(time.Duration(2e9)):
                i++
                response := new(Message)
                response.RequestID = i
                response.Command = "Eject the hot dog."
                err = websocket.JSON.Send(ws, response)
                if err != nil {
                    fmt.Printf("Send failed: %s
    ", err.Error())
                    os.Exit(1)
                }
            case message := <-incomingMessages:
                fmt.Println(`Message Received:`,message)
    
    
            }
        }
    }
    
    func readClientMessages(ws *websocket.Conn, incomingMessages chan string) {
        for {
            var message string
            // err := websocket.JSON.Receive(ws, &message)
            err := websocket.Message.Receive(ws, &message)
            if err != nil {
                fmt.Printf("Error::: %s
    ", err.Error())
                return
            }
            incomingMessages <- message
        }
    }
    

    Also as recoba suggested in the comment, there has been a new gorilla example here for the ones looking for a better solution.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog