我有一个用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?如何将其更改为我想要的端口?
事实上,如果我不更改它,我怎么知道它是什么,以便我的应用程序可以连接到这个服务器?
答案 0 :(得分:3)
Heroku不支持通用TCP服务器,但您应该能够通过socket.io获得所需的功能。
您需要将web放入Procfile中。这就是Heroku将端口80的外部连接绑定到您的Web流量将到达的本地端口的原因。您可以通过查看环境变量$ PORT找到该端口。更多信息,例如:https://devcenter.heroku.com/articles/nodejs
答案 1 :(得分:1)
Heroku的免费层不支持TCP服务器。这是原因。
为节省成本并提供免费服务,Heroku在同一台计算机上托管了多个免费应用程序。这些应用程序(其中之一是您的)共享相同的IP地址。这些应用程序分配给了不同的端口。
但是,正如您可能已经注意到的那样,当您在浏览器中访问应用程序时,端口始终为80。因此,要知道传入的HTTP请求正在寻找哪个应用程序,服务器必须查看HTTP标头。 (例如,使用HOST找出应用程序名称,然后将应用程序名称解析为内部端口号。)
最后,Heroku决定隐藏互联网的内部端口。这以及TCP连接没有HOST
字段的事实,使得不可能用Heroku托管TCP服务器。
要解决此问题,请使用WebSocket。
nslookup
现有的应用程序(例如https://world-of-blogs.herokuapp.com),然后尝试使用IP地址访问该应用程序,则Heroku还会回复一个页面,提示“此处还没有任何内容。 ”