我有一个运行在端口3000上的HTTP服务器上的web应用程序。这个应用程序连接到端口9001上的websocket服务器.WS和HTTP服务器都位于同一个VM内。
在本地testing应用程序(在VM内部)时,一切正常。 Web应用程序和WS服务器都可以相互通信。 应用程序和服务器都在本地主机上监听连接,如下所示:
Web应用程序(ReactJS): const sock = new WebSocket('ws://localhost:9001/');
WS Server(Python): ws = WebsocketServer(host='127.0.0.1', port=9001)
当将其设置为允许外部连接时,Web应用程序和WS服务器不能再进行通信。 服务器仍然监听host='127.0.0.1'上的连接。 Web应用程序前端代码被更改为连接到虚拟机运行的机器(比如123.45.67.890 ):
Web应用程序(ReactJS): const sock = new WebSocket('ws://123.45.67.890:9001/');
我为端口3000和9001启用端口转发,并从VM内部的两个端口上禁用防火墙。 这两个端口在主机上都是打开的。
我可以使用123.45.67.890:3000从外部访问Web应用程序,所以我很确定与虚拟机的连接是打开的。 但是,Web应用程序不会与端口9001上的WS服务器通信。任何想法可能是什么原因?
以防万一OS信息是有帮助的:
VM主机: Microsoft Windows 7 Enterprise (6.1.7601 Service Pack 1 Build 7601)
VM Guest: CentOS Linux release 7.4.1708 (Core)
这很容易修复,甚至写在我正在使用的websocket服务器的文档。
只需要实例化WS服务器,如下所示: ws = WebsocketServer(host='0.0.0.0', port=9001)以便监听所有传入的连接。