我正在运行一个Gorilla/websocket用于实时国际象棋/聊天应用程序的 Go 网络服务器。据我所知,我在 Go方法和 Javascript函数两个位置定义了地址和端口。这在同一主机上的跨浏览器中效果很好,但是在尝试通过我的内部网络扩展功能时会变得很棘手。所以我使用,例如:http.ListenAndServer()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 (eg) 10.232.44.20;对于后者,内部 ip 硬编码,它可以工作,但其他尝试没有。我认为 using0.0.0.0会接受来自网络内的所有连接,我从这个答案中收集到这些连接: 0.0.0.0、127.0.0.1 和 localhost 之间有什么区别?我应该如何编程才能访问内部网络中的服务器,而无需硬编码我的内部 IP 地址ListenAndServe?new Websocket我应该从 Js 和 Go 以编程方式访问该号码吗?最后,我希望能够在各种网络上运行此服务器,无需配置,并让它正常工作。我错过了什么?
1 回答
翻过高山走不出你
TA贡献1875条经验 获得超3个赞
如果网页和 websocket 端点由同一主机提供服务,则使用用于获取网页的主机创建 websocket:
conn = new WebSocket("ws://" + window.location.host + "/ws");
这仅适用于所有网络配置。
就 Go 代码而言,最简单的方法是监听所有网络:
if err := http.ListenAndServe(":8080", nil); err != nil {
// handle error
}
- 1 回答
- 0 关注
- 202 浏览
添加回答
举报
0/150
提交
取消