内部网络上的 Websockets 地址需要静态 ip?
Websockets Address on Internal Network need's static ip?
我正在 运行使用 Gorilla/websocket
为实时 chess/chat 应用程序设置 Go 网络服务器。据我所知,我在两个位置定义了 address 和 port,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
}
我正在 运行使用 Gorilla/websocket
为实时 chess/chat 应用程序设置 Go 网络服务器。据我所知,我在两个位置定义了 address 和 port,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
}