【问题标题】:Deploying a TCP server to Heroku将 TCP 服务器部署到 Heroku
【发布时间】:2013-09-07 04:35:59
【问题描述】:

我有一个用 node.js 编码的 TCP 服务器。我想把它放在 Heroku 上,因为它是一项免费服务,我只需要他们的免费计划提供的服务。

现在,我对 Heroku 的内部运作知之甚少,而且我对整个事情还很陌生,所以我有几个问题。

首先,是否可以部署 TCP(非 Web)服务器?我读过 Heroku 不喜欢 node.js 的网络,因为它不支持 websockets,我应该使用 socket.io。

所以我已将服务器切换到 socket.io。我想。因为我的代码或多或少看起来是一样的。我也这样做了:https://devcenter.heroku.com/articles/using-socket-io-with-node-js-on-heroku

我应该在我的 Procfile 中放入什么而不是“web”?此外,当我尝试部署我目前拥有的东西时,日志显示我的应用程序无法绑定到 $PORT。什么是 $PORT?以及如何将其更改为我想要的端口?

实际上,如果我不更改它,我怎么知道它是什么,以便我的应用程序可以连接到此服务器?

【问题讨论】:

  • 虽然它默认不支持 websockets,但是如果你已经安装了工具带,你现在可以在 heroku 中启用它们:$ heroku labs:enable websockets -a myapp

标签: node.js heroku tcp socket.io


【解决方案1】:

Heroku 不支持通用 TCP 服务器,但您应该能够通过 socket.io 获得所需的功能。

您需要将 web 放入您的 Procfile。这就是让 Heroku 将外部连接绑定到端口 80 到您的网络流量将到达您的本地端口的原因。您可以通过查看环境变量 $PORT 找到该端口。更多信息和示例在这里:https://devcenter.heroku.com/articles/nodejs

【讨论】:

  • 哦,所以 $PORT 只在我的服务器中使用?我的客户应该连接到 80,对吧?
  • 没错。 Heroku 的路由结构会从 80 重定向到您的自定义端口。
【解决方案2】:

Heroku 的免费层不支持 TCP 服务器。这就是原因。

为了节省成本并提供免费服务,Heroku 在同一台机器上托管了多个免费层级应用。这些应用程序(其中之一是您的应用程序)共享相同的 IP 地址。这些应用程序被分配到不同的端口。

但是,您可能已经注意到,当您在浏览器中访问应用程序时,端口始终为 80。因此,要知道传入的 HTTP 请求正在寻找哪个应用程序,服务器必须查看 HTTP 标头。 (例如,使用 HOST 查找应用名称,然后将应用名称解析为内部端口号。)

最后,Heroku 决定对互联网隐藏内部端口。这一点,再加上 TCP 连接没有HOST 字段的事实,使得不可能使用 Heroku 托管 TCP 服务器。

要解决此问题,请使用 WebSocket。

附录:研究

  • 测试是在 2020 年 3 月使用免费的 Heroku 应用完成的。
  • 如果您编造了一个不存在的应用名称(例如 https://hr.herokuapp.com),Heroku 会回复一个页面,显示“这里什么都没有。”
  • 如果您首先手动nslookup 一个现有应用程序(例如https://world-of-blogs.herokuapp.com),然后尝试使用 IP 地址访问该应用程序,Heroku 也会响应页面显示“这里还没有任何内容”。

【讨论】:

    猜你喜欢
    • 2016-08-30
    • 1970-01-01
    • 2022-01-09
    • 1970-01-01
    • 2022-01-04
    • 2021-06-22
    • 2017-10-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多