如何让websocket客户端等到服务器运行?

时间:2012-11-25 12:46:29

标签: websocket go

我想创建一个等待服务器运行的websocket客户端。如果服务器关闭连接,则应重新连接。

我尝试的操作不起作用,我的代码退出并出现运行时错误:

panic: runtime error: invalid memory address or nil pointer dereference

func run() {
  origin := "http://localhost:8080/"
  url := "ws://localhost:8080/ws"

  ws, err := websocket.Dial(url, "", origin)

  if err != nil {
      fmt.Println("Connection fails, is being re-connection")
      main()
  }

  if _, err := ws.Write([]byte("something")); err != nil {
    log.Fatal(err)
  }
}

1 个答案:

答案 0 :(得分:8)

您的示例看起来像一个代码段。很难说为什么你在没有看到所有代码的情况下得到错误。正如您在帖子的评论中指出的那样,您不能再从您的代码中调用main(),并且包括恐慌报告中的行号也会有所帮助。

通常将程序最小化到最小的情况,任何人都可以运行并重现错误是获得帮助的最快方法。我以这种方式为你重建了你的。希望您可以使用它来修复自己的代码。

package main

import (
    "websocket"
    "fmt"
    "log"
    "time"
    )

func main() {
    origin := "http://localhost:8080/"
    url := "ws://localhost:8080/ws"

    var err error
    var ws *websocket.Conn
    for {
        ws, err = websocket.Dial(url, "", origin)
        if err != nil {
            fmt.Println("Connection fails, is being re-connection")
            time.Sleep(1*time.Second)
            continue
        }
        break
    }
    if _, err := ws.Write([]byte("something")); err != nil {
        log.Fatal(err)
    }

}

要运行此功能,只需将其复制到系统上名为main.go的文件中,然后运行:

go run main.go