当 web 端口 80 已经在使用时,如何监听 heroku 上的任何端口?

Posted

技术标签:

【中文标题】当 web 端口 80 已经在使用时,如何监听 heroku 上的任何端口?【英文标题】:how to listen on any port on heroku when a web port 80 is already in use? 【发布时间】:2017-10-12 04:45:46 【问题描述】:

我是heroku 的新手,我已经在heroku 上部署了一个meteorjs 应用程序。我的 Meteorjs 应用程序是一个 web 应用程序,因此在构建完成后,它在端口 80 上的 heroku 上运行。但同时我也想在端口上监听,例如:4000 或任何端口,以便我可以捕获任何第三方触发的 webhook 事件想听。在我的本地机器上,它运行完美,webapp 在一个端口上运行,监听器在另一个端口上运行,但是在 heroku 上,我部署了它只是运行的 webapp 而监听器不监听。任何人都可以帮助我或指导我。也欢迎任何新的解决方案..

在我的 server/main.js 中,我创建了一个 facebook-bot-messenger 的机器人实例,下面是启动监听器的代码

bot.listen(4000);

在我的 client/main.html 中,我的 html 代码只是 hello world

在本地机器上,当我访问http://localhost:3000 时,我可以看到 helloworld 并且应用也在侦听端口 4000。

当我访问 https://appname.herokuapp.com 时,我在 heroku 上看到了 helloworld。在这种情况下,端口是 80,这很好,但机器人没有监听,因为我在端口 4000 上的 https://appname.heroku.com 上进行的任何帖子调用都没有响应。

【问题讨论】:

您能否编辑您的问题以包含您正在收听的代码?通常你可以创建任意数量的服务器端点。 编辑了这个问题,任何新的解决方案也会对我有所帮助..我今天刚开始使用 heroku,我不知道我应该在 heroku 或我的代码中做哪些更改才能运行它..跨度> 【参考方案1】:

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

您还可以将|| 用于 as 和 OR。例如在下面的例子中,它会在 Heroku 上从环境变量中读取端口号,但在本地它会默认为端口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'));
);

【讨论】:

以上是关于当 web 端口 80 已经在使用时,如何监听 heroku 上的任何端口?的主要内容,如果未能解决你的问题,请参考以下文章

如何修复监听端口 80 的远程端口转发失败

如何更改Apache中的HTTP监听端口

在 windows server 2008 r2 上停止端口 80

Tomcat监听443端口的方法

运行问题,如何修改APACHE的监听端口和密码

Nginx如何配置多个服务域名解析共用80端口详解