【问题标题】:NodeJS and ReactJS socket communicationNodeJS 和 ReactJS 套接字通信
【发布时间】:2019-02-14 23:43:12
【问题描述】:

我有一个漂亮的全栈应用程序,在服务器端使用 NodeJS,在客户端使用 ReactJS。该应用程序依赖于 Socket.IO 包,包括服务器和客户端 API。

在我的计算机上,对于节点的 localhost 4000 和对于 react 的 localhost 3000 一切正常。每个套接字事件的完美通信。但在未来,我的设置会有所不同。

我想将服务器端代码托管在一台服务器上,这里称为 SERVER_A,客户端代码托管在另一台服务器上,这里称为 SERVER_B,充当用户的网关。我所期望的是客户端将在他的个人计算机上打开http://SERVER_B:80/myapp,我的反应应用程序将打开,并且所有套接字通信都将在 SERVER_B 和 SERVER_A 之间在内部完成,将节点应用程序发出的数据留给客户端。但真正发生的是,他的个人计算机上的用户需要同时访问 SERVER_B 的 80 端口和 SERVER_A 的 4000 端口,整个应用程序才能正常运行。

这很糟糕,因为这种类型的通信应该在后台进行。有什么方法可以限制 Node 和 React 之间的套接字侦听和发出事件,并使客户端只保留渲染的数据?

希望这很清楚,对菜鸟感到抱歉... :)

提前致谢!

【问题讨论】:

  • 我不确定如何回答这个问题,因为在我看来,您想要避免的不良行为是一个实施问题。这意味着解决方案将是“编写实际执行您想要发生的事情的代码”。如果需要服务器 A 和服务器 B 的客户端之间进行实时通信,则需要打开客户端 B 到服务器 A 的套接字连接,或者将客户端和服务器 B 之间的消息转发到服务器 A。

标签: javascript node.js reactjs sockets socket.io


【解决方案1】:

VirtualHost 将响应的默认端口是在“幕后”配置的(对于非恶意消费者的第一眼可见)。 所以你的客户会看到https://SERVER_B/https://SERVER_A,但是默认端口会不同。

【讨论】:

    【解决方案2】:

    我认为您想让 SERVER_A 对用户不可见。相反,它在后台为 SERVER_B 提供数据。如果是这样,我认为您必须在 SERVER_B 中设置一个虚拟主机(使用代理之类的东西)以在 SERVER_B 和 SERVER_A 之间进行通信。因此,每当您的客户端向 SERVER_B 发出请求(用于与节点应用程序关联的连接)时,SERVER_B 都会建立套接字连接到 SERVER_A 并继续通信。

    如果我不得不说我不建议这样做,因为这种设置会降低性能。这背后的原因是,SERVER_B 必须首先读取客户端流然后将流写入 SERVER_A。当 SERVER_A 发送一些流它必须再次写回客户端。

    【讨论】:

    • 是的,这就是这里的意图。实际上,我希望 SERVER_B 类似于 SERVER_A 的单个客户端,而他们个人计算机上的用户只是查看 SERVER_B 接收到的数据。但是发生的情况是每个连接到 SERVER_B 的用户都像 SERVER_A 的不同客户端一样。
    • 如果这就是你想要的,你应该在 SERVER_B 中使用类似代理的东西。但是这个设置不是最好的
    猜你喜欢
    • 1970-01-01
    • 2017-05-20
    • 1970-01-01
    • 1970-01-01
    • 2017-08-03
    • 1970-01-01
    • 1970-01-01
    • 2011-10-12
    • 1970-01-01
    相关资源
    最近更新 更多