内部网络上的 Websockets 地址需要静态 ip?

Websockets Address on Internal Network need's static ip?

我正在 运行使用 Gorilla/websocket 为实时 chess/chat 应用程序设置 Go 网络服务器。据我所知,我在两个位置定义了 addressport,Go http.ListenAndServer() 方法和 Javascript new Websocket();函数。这在同一台主机上的跨浏览器上工作得很好,但是当试图通过我的内部网络扩展功能时它会变得棘手。所以我使用,例如:

开始:

PORT := "0.0.0.0:8080"
// ...
http.HandleFunc("/ws", func(w http.ResponseWriter, r *http.Request) {
    h.serveWs(hub, w, r) // h is a chessboard Handler wrapper
})
//...
http.ListenAndServe(PORT, nil)

Javascript:

conn = new WebSocket("ws://0.0.0.0:8080/ws");

在我尝试使用 0.0.0.0 地址、localhost 或我的 hostname 和我的主机内部ip(例如)10.232.44.20;对于后者,内部 ip 硬编码,它有效,但其他尝试无效。我认为使用 0.0.0.0 会接受来自网络内部的所有连接,这是我从这个答案中收集到的: What is the difference between 0.0.0.0, 127.0.0.1 and localhost?

我应该如何编程 ListenAndServe 以及 new Websocket 以便我可以访问内部网络中的服务器,而不必硬编码我的内部 ip 地址?我应该从 Js 和 Go 以编程方式访问该号码吗?最后,我希望能够 运行 这个服务器在各种网络上,无需配置,并且 正常工作 。我错过了什么?

如果网页和 websocket 端点由同一主机提供服务,则使用用于获取网页的主机创建 websocket:

conn = new WebSocket("ws://" + window.location.host + "/ws");

这将适用于所有网络配置。

就Go代码而言,最简单的方法是监听所有网络:

if err := http.ListenAndServe(":8080", nil); err != nil {
    // handle error
}