我从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应用程序,推荐的方式是什么?
发布于 2017-01-18 00:54:25
所以,为了回答你的问题:
您不能让一个应用程序在一个Heroku dyno上的多个端口上运行。
但是,您可以运行多个Heroku dynos,并且每个Heroku dynos运行不同的命令。这允许您在同一项目中的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上使用本地websocket应用程序。
在我刚刚链接的文档中,有一个Node应用程序示例--它还特别概述了它是如何工作的。
最后--关于子域--你链接到的另一个Stack Overflow帖子不再准确。Heroku很久以前就添加了对通配符域的支持(通常用于多租户目的)。
这意味着,如果您正在构建一个基于子域为用户动态提供页面的应用程序,那么您就走运了!这是完全支持的。你可以这样做:
$ heroku domains:add *.example.com当你更新你的DNS以指向通配符时,你应该开始看到所有的子域请求进入你的Heroku应用程序。
要了解更多关于Heroku +子域的内容,他们在这里有一篇很棒的文章:https://devcenter.heroku.com/articles/custom-domains#add-a-wildcard-domain
发布于 2017-01-22 06:22:53
我最终发现您实际上可以对websocket和http使用相同的端口。例如,使用socket.io,您只需执行以下操作...
var SocketIO = require('socket.io');
var express = require('express');
var app = express();
// Put your middleware and routes here...
const server = app.listen(port, function(err){
console.log("Express server running on port:" + port);
});
var io = SocketIO(server);由于执行app.listen时的返回值是服务器,因此您实际上可以直接将其传递给socketIO。在那里,您可以执行io.on(...)等。
https://stackoverflow.com/questions/41690066
复制相似问题