据我从 SE 上的其他问题了解到,不可能在 Heroku 应用程序中使用多个端口,因为 Heroku 会使用环境变量分配端口。
有推荐的方法来解决这个问题吗?我见过一些使用带有子域的代理模块:
Heroku + node.js: I have a server which uses multiple ports. How can I get Heroku to allocate them?
但是,在这篇文章中:
How to create a subsubdomain for an app on heroku: (e.g. sub.myapp.herokuapp.com)
这表明子域在heroku中不再可能。
在我的应用程序中,我目前正在通过 Express 提供内容,并有一个 WebSocket 服务器用于同步一些实时内容,两者都需要端口。我的问题是,heroku 中是否可以使用子域,以及为需要多个端口的 Web 应用程序提供服务的推荐方法是什么?
最佳答案
那么,回答你的问题:
您不能让单个应用程序在单个 Heroku dyno 上的多个端口上运行。
但是,您可以运行多个 Heroku dyno,并且每个都运行不同的命令。这允许您在同一项目中的 Heroku 上运行不同“类型”的服务器。执行此操作的方法是在 Procfile
中指定如何运行不同类型的服务器,例如:
web: node server.js
other-web: node other-server.js
要运行 server.js
的一个实例和 other-server.js
的一个实例,您只需告诉 Heroku 将这些进程作为 dynos 运行,如下所示:
$ heroku ps:scale web=1 other-web=1
现在——关于 websockets,Heroku 在几年前就原生支持它们(您可以在这里阅读更多相关信息: https://devcenter.heroku.com/articles/websockets )。这意味着您可以按照典型的 Websocket 模式在 Heroku 上使用 native Websocket 应用程序。
在我刚刚链接到的文档中,有一个示例 Node 应用程序 - 它还具体概述了它的工作原理。
最后,关于子域,您链接到的其他 Stack Overflow 帖子不再准确。 Heroku 很久以前就添加了对通配符域的支持(通常用于 Multi-Tenancy 目的)。
这意味着,如果您正在构建一个应用程序,希望根据子域向用户动态提供页面:那么您很幸运!这是完全支持的。你可以这样说:
$ heroku domains:add *.example.com
当您更新 DNS 以指向通配符时,您应该开始看到所有子域请求都进入您的 Heroku 应用。
要了解有关 Heroku + 子域内容的更多信息,他们在这里有一篇关于它的优秀文章:https://devcenter.heroku.com/articles/custom-domains#add-a-wildcard-domain
关于node.js - 使用 Heroku 的多端口应用程序的推荐方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41690066/