Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使websocket客户端在服务器运行时等待?_Websocket_Go - Fatal编程技术网

如何使websocket客户端在服务器运行时等待?

如何使websocket客户端在服务器运行时等待?,websocket,go,Websocket,Go,我想创建一个websocket客户端,它等待服务器运行。如果服务器关闭了连接,则应重新连接 我尝试的内容无效,我的代码退出时出现运行时错误: panic:运行时错误:无效内存地址或零指针取消引用 func run() { origin := "http://localhost:8080/" url := "ws://localhost:8080/ws" ws, err := websocket.Dial(url, "", origin) if err != nil {

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

我尝试的内容无效,我的代码退出时出现运行时错误:

panic:运行时错误:无效内存地址或零指针取消引用

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)
  }
}

您的示例看起来像一个代码片段。如果没有看到所有的代码,很难说为什么会出现这种错误。正如您在文章的评论中指出的,您不能从代码中再次调用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

“但它不起作用”-为什么?它有什么作用?您是否收到任何错误消息?抱歉,只要客户端在服务器启动前出现错误“紧急:运行时错误:无效内存地址或零指针解引用”,紧急消息还包括行号,这可能会提供线索。不过,乍一看,您无法调用main来重新启动程序。Main由运行时调用,您自己调用它是无效的。谢谢您的时间,这就是我想要的