gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 01:58:35 28 4
gpt4 key购买 nike

我正在使用 Gorilla/websocket 运行围棋网络服务器,用于实时国际象棋/聊天应用程序。据我所知,我在两个位置定义了 addressport,Go http.ListenAndServer() 方法和 Javascript 新的 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
}

关于javascript - 内部网络上的 Websockets 地址需要静态 ip?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39194772/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com