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 arduino控制ps2手柄一直报错
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥85 maple软件,solve求反函数,出现rootof怎么办?
  • ¥15 求chat4.0解答一道线性规划题,用lingo编程运行,第一问要求写出数学模型和lingo语言编程模型,第二问第三问解答就行,我的ddl要到了谁来求了
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥15 maple软件,用solve求反函数出现rootof,怎么办?
  • ¥65 汇编语言除法溢出问题
  • ¥15 Visual Studio问题
  • ¥20 求一个html代码,有偿