内部网络上的Websocket地址需要静态IP吗?



我使用Gorilla/websocket运行一个围棋web服务器,用于实时国际象棋/聊天应用程序。据我所知,我在两个位置定义了地址端口, 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会接受来自网络内的所有连接,我从这个答案中收集到:0.0.0.0、127.0.0.1和localhost的区别是什么?

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

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

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

这将在所有网络配置中工作。

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

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

相关内容

  • 没有找到相关文章

最新更新