我有一个漂亮的全栈应用,服务器端有NodeJS,客户端有ReactJS。该应用程序依赖于服务器和客户端API的Socket.IO软件包。
在我的计算机上,对于node的localhost 4000和对react的localhost 3000一切正常。在每个套接字事件上的完美通信。但是将来,我的设置会有所不同。
我想将服务器端代码托管在一个称为SERVER_A的服务器上,并将客户机端代码托管在另一个称为SERVER_B的服务器上,就像用户的网关一样。我希望客户端将在他的个人计算机上打开http://SERVER_B:80/myapp
,我的react应用将打开,并且所有套接字通信都将在SERVER_B和SERVER_A之间在内部完成,而客户端将保留节点应用发出的数据。但是真正发生的是,他的个人计算机上的用户需要同时访问SERVER_B的端口80和SERVER_A的端口4000,才能使整个应用正常运行。
这真是令人讨厌,因为这种交流应该在幕后进行。有什么方法可以限制Node和React之间的套接字侦听和发出事件,并使客户端仅保留渲染的数据?
希望这很清楚,很抱歉...:)
谢谢!
答案 0 :(得分:0)
VirtualHost用来响应的默认端口是在“幕后”配置的(对非恶意使用者而言,这是看不见的)。 这样您的客户端将看到https://SERVER_B/和https://SERVER_A,但是DEFAULT端口将有所不同。
答案 1 :(得分:0)
我认为您想使SERVER_A对用户不可见,而是在后台为数据提供SERVER_B。如果是这样,我认为您必须在SERVER_B中设置一个虚拟主机(使用类似代理的东西)以在SERVER_B和SERVER_A之间进行通信。因此,只要您的客户端向SERVER_B请求(用于与节点应用程序相关的连接),SERVER_B就会建立套接字连接到SERVER_A,通信继续进行。
如果不得不说我不建议这样做,因为这种设置会降低性能。背后的原因是,SERVER_B必须先读取客户端流,然后将流写入SERVER_A。当SERVER_A发送一些流,它必须再次写回客户端。