一个服务器文件中有多个Node.js“应用程序”是一种不好的做法吗?

4
目前,我通过一个server.js文件运行两个(即将是三个)node.js WebSocket应用程序。我使用express来提供整个页面的服务,以及我编写的粒子物理“游戏”。我还将制作一个聊天室,只是为了学习更多相关知识。
我的问题(或者说并没有问题?)是所有这些都通过一个server.js文件运行。Heroku似乎要求这样做,所以我不确定是否有其他选择。我正在使用Heroku进行主机托管。
我的问题是,这是不好的做法吗?我是否遗漏了其他应该做的事情?所有我的“应用程序”都非常低流量,因此我认为这不是一个很大的问题。我只是想从一开始就学习最佳实践,以免犯愚蠢的错误。谢谢。
编辑:我如何在Heroku中特定地拆分应用程序,具体的Procfile设置是什么?
1个回答

5
在我看来,如果这些应用程序没有关联,那么这是一种不好的做法。在同一台物理或虚拟服务器上运行3个节点应用程序本身并不是不好的,只要资源可以处理它。但是,通过同一个Server.js文件运行它们将导致许多东西出现在不该出现的地方。考虑这样一种情况:应用程序1中的致命错误会关闭(或影响性能)应用程序2或应用程序3。
您应该通过将每个应用程序分离为监听不同端口的单独实例来封装每个应用程序,然后使用快速反向代理(即nginx)从Web代理到它们。您可以创建无状态库以封装任何共享功能,然后将这些库包含在需要它的每个应用程序中。
例如:
app.yourserver.com => localhost:8997 (node app 1)
app2.yourserver.com = localhost:8998 (node app 2)
app3.yourserver.com => localhost:8999 (node app 3)

这里是如何使用nginx设置反向代理的信息:http://nginx.com/resources/admin-guide/reverse-proxy

我在考虑将它们分开,但是这在Heroku上怎么实现呢?我必须像这里所示的那样创建一个procfile,告诉它要运行什么命令。我可以完全创建3个单独的应用程序,但是据我所知,这需要3个单独的git存储库、域名等。 - Ricky Mutschlechner
1
我在这方面无法提供真正的帮助,因为我手动管理所有的IT资源。然而,这绝对是可能的,如果需要单独的GIT存储库,那就这样吧!这是一个好习惯,在开始时稍微多花一点额外的时间,可以在未来节省无数的时间。 - Sam Levin
Git仓库并不是最大的问题,而是域名。很遗憾,我只能将我的域名指向Heroku应用程序中的一个..至少从我所知道的情况来看是这样。我仍然感谢您的回答,并已为其点赞。如果我没有得到更好的答案,几天后我会将您的答案标记为接受的答案。感谢您的帮助。 - Ricky Mutschlechner

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接