如何在Heroku上监听任意端口,当Web端口80已经被占用时?

5
我是新手,正在使用Heroku,并在Heroku上部署了一个Meteorjs应用程序。我的Meteorjs应用程序是一个Web应用程序,所以构建完成后它在Heroku上运行在端口80上。但同时,我也想监听另一个端口,例如:4000或任何其他端口,这样我就可以捕获由任何第三方触发的Webhook事件。在我的本地机器上,Web应用程序在一个端口上运行,监听器在另一个端口上运行,但在Heroku上部署后,只有Web应用程序在运行,监听器不会监听。是否有人可以帮助或指导我?欢迎任何新的解决方案。
在我的server/main.js文件中,我已经创建了一个facebook-bot-messenger的bot实例,以下是启动监听器的代码。
bot.listen(4000);

在客户端/main.html中,我有一个仅包含“Hello World”的HTML代码。
在本地机器上访问http://localhost:3000时,我可以看到“Hello World”,应用程序也在4000端口上监听。
在Heroku上访问https://appname.herokuapp.com时,我看到“Hello World”。在这种情况下,端口是80,这很好,但机器人没有监听,因为我在https://appname.heroku.com的4000端口上进行的任何POST调用都没有响应。

你能否编辑你的问题,包括你正在监听的代码?通常情况下,你可以创建任意数量的服务器端点。 - tadman
我编辑了问题,任何新的解决方案都会对我有所帮助。我今天刚开始使用Heroku,不知道我应该在Heroku或我的代码中做出哪些更改才能使其运行。 - Chetan
1个回答

15

Heroku将为您分配端口,因此您无法设置自己的端口号。您将需要从PORT环境变量中读取端口号。在Node中,这将是process.env.PORT

您还可以使用||作为或运算符。例如,在以下情况下,它将从环境变量中读取端口号,而在本地情况下,默认为端口4000

const app = express();
app.set('port', (process.env.PORT || 4000));

//Start Server
app.listen(app.get('port'), function() {
  console.log('Node app is running on port', app.get('port'));
});

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