1

我一直在努力将 node.js 放在我们的 java webserver 前面,以利用 node 的异步处理——做一些轻量级的处理和其他任务,最终是 socket.io。该应用程序的大部分实际工作都是在 java 中完成的,到目前为止,我们一直在使用 jetty 网络服务器来处理所有请求。我最初一直在考虑使用 node-http-proxy 来转发(可能是修改过的请求)。经过进一步考虑,我意识到我可以使用 RabbitMQ 和 node-amqp 库之类的东西来实现更健壮的通信协议,而不是转发 http 请求。这也将更好地支持从 java 通过 node 和 socket.io 推送回浏览器。

我的问题是:现在使用节点处理所有传入请求,是否有任何理由继续在码头内运行 java?如果不是,我是否应该从命令行的 main 方法中直接运行 java 代码?最后,这种方法是否存在重大缺陷?

我们的应用程序是一个单页应用程序,除了最初加载页面的第一个请求之外,所有进一步的调用都只是 restful json 调用,并且应该很容易通过 amqp 传输。

4

1 回答 1

2

根据使用情况,使用 Jetty 或 Tomcat 作为 java 程序容器没有任何优势。Jetty 或 Tomcat 的优势在于接收 HTTP 请求并将其转发给 worker java 程序。但是在您的情况下,NodeJS 接收请求并转发给 MQ,java 工作人员将主动连接到 MQ 并获取任务并在完成后发送结果。所以最好在这里使用独立的Java。并且当请求变得很多时,当worker集群处理更多任务时,很容易启动许多独立的Java程序。NodeJS 和 MQ 可以异步缓存多个请求,Java 工作者可以同步处理它们。例如:1 个 NodeJS 服务器、1 个 MQ 服务器、3 个 Java 工作服务器。

于 2013-11-21T02:14:59.453 回答