Node.js 到 Python 通信 - 服务器或子进程?

Node.js to Python communication - server or child process?

我目前在做一个主要用Node.js写的项目,涉及到非线性曲线拟合。在尝试使用 Node.js 本身完成此任务后,我放弃了它,因为它根本不切实际。所以我一直在寻找一种高级语言来解决我面临的数学问题。我不得不在 MATLAB 和 Python 之间做出决定,但是由于 Python 现在已经有了非常强大的方法而且它是免费的,所以我决定选择 Python。

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

  1. 设置 Python 服务器,解决所描述的数学问题 here
  2. 或者按照 here
  3. 所述从我的 node.js 代码生成子进程

现在我通常会使用客户端服务器方法,因为在我看来它更简洁,因为它将两种语​​言分开。但是既然有人正在写关于第二种方法的博客post,那么它肯定有一些优势,对吧?

有人能简要解释一下在这种情况下这两种方法的优缺点吗?

两种方法各有利弊。

独立服务器

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

另一方面,您有一个很好地分离的服务,可以被其他应用程序使用,如果您需要更高的性能,可以轻松地移动到一个单独的盒子或一组盒子。

生成进程

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

另一方面,您只能在与您的 Node 程序相同的机器上使用 运行 Python 程序,如果性能有问题,那么您将不得不将其作为一个单独的程序服务器能够 运行 它在不同的机器或一组机器上。

选择

选择实际上取决于您自己对未来使用情况和服务器负载的期望。这两种方法都有效,并且都有不同的优点和缺点。

抽象

无论如何,以模块的形式抽象出该选择可能很有用,这样您的主代码就不需要知道您做出了哪个选择。这将意味着您以后可以改变主意。

制作模块可以很简单,只需将相关代码放在单独的 .js 文件中,然后从主代码中获取该文件即可。该模块可以导出一个或多个接受回调或 return 承诺的函数,只要回调被调用或承诺得到预期的解决,您的主代码就不需要知道引擎盖下发生了什么数据.