【问题标题】:Best way for a Node.js application to interact with an external programNode.js 应用程序与外部程序交互的最佳方式
【发布时间】:2015-09-30 00:49:08
【问题描述】:

我是 Web 开发的初学者 - 我正在构建一个需要用户输入一些条目的网站,对这些条目进行一些复杂的数学处理,然后将结果返回给客户端。我正在考虑在另一个更适合此类工作的单独应用程序中实现数学东西(例如在 Java 或 C++ 中,那里有很好的数学库,并且实现会更健壮和更快)。我想知道在架构方面最好的方法是什么。

“虚拟”方法是从 Node.js 应用程序生成一个进程并等待其从 stdout 输出,解析它(可能是 JSON),然后在将结果发送到客户端之前对其进行处理。我很难相信这是最好的方法(它似乎太容易出错,没有适当的错误处理,依赖于输出,只是简单的坏习惯)。更好的方法是让 Java 或 C++ 应用程序侦听特定端口并等待来自 Node.js 应用程序的请求。然而,这需要在负载平衡方面进行更多思考(它如何随请求数量扩展?)。最后,我在网上找到的最后一种方法是使用 RabbitMQ 等排队系统作为 Node.js 应用程序和 Java 应用程序之间的通信方式。

通常(在“传统”软件中),实现一个单独的库来保存我们可以调用的所有数学魔法将是一个不错的方法。

使用 Node.js/web 应用程序实现这一目标的最佳方法是什么?必须有针对此类问题的良好实践/模型/架构/设计。谢谢!

【问题讨论】:

  • 看看这个mathjs.org 或许你可以绕过外部的“数学应用程序”,在 Node.js 中做所有事情,但我不知道你要做什么数学。

标签: javascript node.js web-services web


【解决方案1】:

我能想到的最好方法是编写一个本机 nodejs 模块,您可以使用 C++ 和任何您必须编写代码并导出一些 API 以从 node 的 javascript 调用的库。 p>

这还允许您将本机应用程序打包为 nodejs 的模块,然后可以使用 npm 分发和编译/安装。

这是来自节点网站的official tutorial

这不是最简单的方法,但肯定是更优雅和可维护的方法。

【讨论】:

    【解决方案2】:

    如果您的问题可以以无状态的方式构建——即您发送一个带有数据和相关任务的请求,然后接收结果作为响应,我可能会为前端创建一个 Angular 应用程序,以及后端的多个节点服务器(如果您需要同时处理许多请求)。

    正如在下面的第一个答案中所指出的,您可以将您想要解决的问题的任何部分放入本机代码中,但是更容易的是使用套接字连接到服务器来进行计算,在任何语言等... 在一个项目中,我使用 socket.service 来处理与服务器之间的所有通信。 (下一段的 angular-fullstack 生成器有这样一个骨架 socket.service 。)

    在前端与节点后端相结合方面,用于创建 MEAN 堆栈应用程序的 Yeoman 生成器 (http://yeoman.io/generators/) 使用 MongoDB、Express、AngularJS 和 Node - 可让您按照最佳实践快速设置项目。 angular-fullstack 生成器将为您提供一个在很多方面都领先于光年的框架。您可以使用 yeoman 生成示例应用程序前端(angular、express)和支持套接字等的后端(NodeJs、MongoDB)......

    这也不是很简单,但最终,通过几个月的工作,您将获得一个您永远不会超越的结构化问题和解决方案。当我第一次想进入这个领域时,这就是我所走的路。事实上,前端是/现在更难的部分,而后端则通过套接字、http 或任何变得更简单的东西连接。在服务器方面,AWS,甚至只是通过 DigitalOcean 或许多其他方式在 Linux 上运行的 nginx 既便宜又灵活。

    我希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 2010-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-10
      • 2014-03-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多