建立连接后,websocket 可以访问 firewall/router 后面的设备吗?

Can websocket access devices behind firewall/router once connection is setup?

我想知道我的服务器是否可以使用网络套接字访问防火墙后面的设备,一旦该设备建立连接(因为该设备可以访问服务器)?

我看过,其中提到了同样的场景,但是从回答中看不清楚服务器是否可以访问路由器后面的设备。

如果可能的话,我想使用 socket.io 首先启动客户端到服务器的连接,然后使客户端可以从服务器访问以进行进一步的通信。

我本来可以自己尝试的,但我现在没有这样的设置。谢谢!

只要客户端建立连接,服务端就可以推送消息(websocket说到底就是TCP连接)

您可能遇到的唯一问题是如果客户端由于某些原因无法使用 websockets 连接 proxy/firewall,在这种情况下,您可以尝试使用安全的 websockets (wss)。这些通常被允许通过,因为 websockets 层被 TLS 屏蔽,通常不会被 firewalls/proxies.

阻止

当客户端与服务器建立 webSocket 连接时,客户端和服务器之间将启用双向通信。客户端可以随时向服务器发送数据包或服务器可以随时向客户端发送数据包。

这不会使服务器连接到客户端网络上的任何其他设备。因此,例如,如果用户 运行 网络浏览器加载了一个网页,该网页与您的服务器建立了 webSocket 连接,那么您的服务器将无法再连接到该客户端专用网络上的任何其他设备(例如打印机或计算机或某些其他专用设备)比 webSocket 连接发生之前要多。也谢天谢地,因为如果这样做的话,那将是一个巨大的安全漏洞。

当然,您可以使用 "proxies" 访问其他设备的智能客户端。这可能必须是 Web 应用程序以外的其他东西,但您可以在连接到服务器的防火墙后面安装一个客户端应用程序,然后该服务器发送它希望客户端发送的客户端消息,然后将其传递到后面的各种设备防火墙。它本质上是要求客户端建立从客​​户端到防火墙后面的某个其他设备的连接,然后代表服务器执行某些操作(向其发送数据、执行某些命令等)。这样做有明显的安全性 implications/risks,因此必须非常、非常小心地进行以确保安全。此代理方案不特定于 webSocket。它可以通过客户端和服务器之间的任何协议来完成。