Node.js到Python通信 – 服务器还是subprocess?

我目前正在一个主要用Node.js编写的项目,它涉及到非线性曲线拟合。 在尝试用Node.js完成这个任务之后,我放弃了这个任务,因为这是不切实际的。 所以我一直在寻找高级语言来解决像我所面临的那样的math问题。 我必须在MATLAB和Python之间做出决定,但是由于Python现在有非常强大的方法,而且免费,我决定使用Python。

现在我需要find一种在Node.js和Python之间进行通信的方法,而且我已经find了两种完全不同的方法:

  1. 设置一个Python服务器,解决了这里描述的math问题
  2. 或者从我的node.js代码产生一个subprocess,如下所述

现在我通常会使用客户端服务器方式,因为在我看来,它更清洁,因为它将两种语​​言分开。 但是因为有人在写关于第二种方法的博客文章,所以一定有一些优势,对吧?

有人会简单地解释一下这两种方法的优缺点吗?

这两种方法都有优点和缺点。

单独服务器

设置服务器比较耗时,需要确保Python服务器在Node应用程序需要与之通话之前启动,如果停止等,则必须重新启动它。

另一方面,你有一个很好的独立的服务,可以由其他应用程序使用,并可以很容易地移动到一个单独的框或一组框,如果你需要更多的性能。

产生一个过程

产生一个进程比运行一个单独的服务器容易得多,你总是知道它在你需要的时候正在运行。 您不必通过启动脚本,重新生成等来pipe理单独的服务器。

另一方面,你被限制在与你的Node程序相同的机器上运行Python程序,如果性能是一个问题,那么你将不得不使它成为一个单独的服务器,以便能够在不同的机器上运行它或一套机器。

select

这个select对于未来使用率和服务器负载来说确实是一个你自己的期望值。 两种方法都行得通,两者都有不同的强弱。

抽象化

无论如何,以模块的forms抽象出select可能是有用的,这样你的主代码就不需要知道你做了哪个select。 这将意味着你将来可以改变主意。

制作一个模块就像将相关的代码放在一个单独的.js文件中一样简单,并且需要从你的主代码中获取这个文件。 该模块可以导出一个或多个接受callback或返回一个承诺的函数,只要callback被调用,或者预期的数据被解决,主代码就不需要知道在底层发生了什么。