Node.js应用程序与外部程序交互的最佳方式

时间:2015-07-11 07:56:50

标签: javascript node.js web-services web

我是网络开发的初学者 - 我正在构建一个网站,需要用户输入一些条目,对这些条目进行一些复杂的数学处理,并将结果返回给客户端。我正在考虑在另一个单独的应用程序中实现数学内容,这个应用程序更适合这样的工作(比如在Java或C ++中,有很好的数学库,实现会更强大,更快)。我想知道什么是最好的方法,建筑方面。

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

通常情况下(在#34;传统的"软件中),实现一个单独的库,其中包含我们可以调用的所有数学魔法,这将是一个很好的方法。

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

2 个答案:

答案 0 :(得分:0)

我能想到的最好的方法是编写一个 native nodejs模块,你可以使用C ++和任何你编写代码的库,并导出一些API来从节点的javascript中调用。

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

以下是节点网站的official tutorial

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

答案 1 :(得分:0)

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

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

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

这也不是很简单,但最后,经过几个月的工作,你会得到一个结构化的问题和解决方案,你永远不会超过。当我第一次想进入这个空间时,那就是我走的路。事实上,前端是/更难的部分和后端,连接插座,http,或任何已经变得更简单的东西。在服务器方面,AWS,甚至只是Linux上的nginx,通过DigitalOcean或许多其他产品都很便宜且灵活。

我希望这会有所帮助。