使用多个快递stream程的最佳方法?

所以我正在运行一系列聊天机器人,这些聊天机器人几乎没有任何关联的网站。 我使用快递和车把来做所有的事情。 我使用iptables将端口3000上的所有数据路由到端口80

但是,尽pipe包装文件在端口3000 ,但由于机器人是作为subprocess启动的,因此每个端口都必须具有不同的端口。 我正在使用包装路由到端口,但它仍然是烦人的。

例如,我在端口3000上有chatbot.example.com ,但是因为bot#1是一个subprocess,所以它在端口3001上运行它的web服务器。

所以我有包装路线chatbot.example.com/bot1chatbot.example.com:3001/bot1但是,这感觉可怕的俗气。

有没有更好的方法来做到这一点?

当前的代码示例: snippi 。

考虑使用cluster模块进行设置,而不是手动创build包装器和产生subprocess。 它可能比你所拥有的更稳定,如果你想要做的事情应该让他们共享一个端口。

我也不会夫妇(如果是我)在一个进程==一个聊天机器人之间。 相反,我会写应用程序,使任何进程可以响应任何基于path参数或querystring参数chatbot,使用常规的Express路由的东西。 这种方式,如果你可以负载平衡你的进程基于实际使用; 一个被大量打击的聊天机器人可能会被2或3个进程服务,而一个没有被使用的聊天机器人不会消耗额外的资源。

更新了示例代码因此,它看起来像你有点混淆的目的一个tidge。 我无法从你的片段中知道每个网站究竟应该做什么,除了它与给定的聊天机器人相关。 我在这里猜测,每个chatbot的网站的目的是显示活动相对chatbot聊天。 对我来说,最好是将chatbots作为一个节点应用程序(或者每个聊天机器人,无论哪种方式)启动,每个日志都logging到某个数据库,无论您想要跟踪什么状态。 MongoDb,CouchDb,一些SQL数据库,并不重要。 networking应用程序可以只是一个简单的应用程序,只需读取该数据库,并根据path筛选给定的聊天机器人。

总的来说,感觉就像你试图让一个应用程序做太多。

Express可以处理虚拟主机。 我在同一台服务器上运行3个站点,使用express.vhost()和集群,他们都听同一个端口。

所以,你可以做一些像chatbot1.site.com,chatbot2.site.com,所有具有相同的应用程序,只是不同的虚拟主机。

 // main 'server.js' app var express = require('express'); var app = express(); app .use(express.vhost('chatbot1.site.com', require('./chatbot1.js').app ) ) .use(express.vhost('chatbot2.site.com', require('./chatbot2.js').app ) ); // delay for db connections to start up (just what I do) setTimeout( function () { app.listen(port); }, 2000); 

在你的“chatbot#.js”文件中,你需要导出你的应用程序:

 // chatbot#.js var app = exports.app = express (); 

您的“chatbox.js”文件中的应用程序也不会侦听端口,因为“server.js”应用程序开始侦听。 你甚至可以只使用一个chatbot.js文件,这取决于你如何存储/获取它的信息。 我认为它会很简单复制“chatbot1.js”,并使“chatbot2.js”不同的设置。 由你决定,你的“聊天机器人”如何设置。

顺便说一下,这个系统在这里也适用于集群,因为你只需要围绕“server.js”文件中的代码包装集群代码。