我非常熟悉异步、事件驱动、非阻塞编程模型的 Node.js 编程范例。我现在试图了解在虚拟机的云计算生态系统中可以将 Node.js 的使用扩展到什么程度。
在我的 Web 仪表板的服务器端,我将 Node.js 作为 http 服务器运行并与 Cassandra 数据库交互。用户通过浏览器仪表板与我们的云服务交互。在客户端和服务器之间打开的 Websockets 将允许服务器端启动用户仪表板的操作。
用户任务事件的一部分将是为工作流事件生成基于云的虚拟机。这些虚拟机将执行需要与系统的主 Cassandra 数据库交互的应用程序。
我非常希望获得有关以下 Node.js 架构场景的一些反馈:
当用户生成虚拟机时,虚拟机将启动,并在该虚拟机上运行 Node.js 实例。该虚拟机的 Node.js 实例主动打开一个与正在运行或分配给该虚拟机的系统主 Node.js 实例(可能有多个 Node.js 实例可用于与 Cassandra 数据库通信)的 Web 套接字,即从虚拟机的 Node.js 实例建立一个 Node 到 Node 的 Web 套接字。
VM 的 Node.js 实例设置了一系列要在 VM 内部监视的事件。系统的 Node.js 实例还设置了一系列要从 VM 的 Node.js 实例监视的事件。当 VM 的 Node.js 实例事件触发完成时,就会启动并完成所需的 Cassandra DB 操作。系统的 Node.js 实例还监视来自 VM 的某些事件,以启动 Cassandra DB 操作。
实际上,我在这里问的是:通过 websockets 建立 Node.js-2-Node.js 通信 channel ,让两个 Node 实例与同一个后端数据库通信是否有意义?
在此配置中,我似乎能够设置一个高度灵活的双向 VM 事件系链,它可以通过来自系统 Node.js 实例和 VM 的 Node.js 实例的数据库记录操作来观看/监听指定事件。
我在这里描述的是一个非典型且荒谬的场景吗?在此用例中是否有更好的方法来使用 Node.js?有没有更合适的组件配置?
亲切的问候,马克
最佳答案
不,事实并非如此。
WebSocket 协议(protocol)的有用之处仅在于它允许支持 WebSocket 的 Web 浏览器与服务器应用程序进行通信。否则它并不是特别有趣或有用,并且不应该用于不涉及网络浏览器的通信。
使用普通 TCP 套接字(使用 net 模块)进行服务器到服务器通信。
关于在虚拟机和主 Web 服务器中运行的 Node.js 实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19892586/