Deploying a TCP server to Heroku

前端 未结 2 1201
不思量自难忘°
不思量自难忘° 2021-02-10 09:47

I have a TCP server coded in node.js. I\'d like to put it up on Heroku because it\'s a free service and I don\'t need anything more than what their free plan offers.

Now

相关标签:
2条回答
  • 2021-02-10 10:28

    The free tier of Heroku does not support TCP server. Here is the reason.

    To save costs and offer free services, Heroku hosts multiple free-tier apps on the same machine. These apps, one of them being yours, share the same IP address. The apps are assigned to different ports.

    However, as you probably noticed, when you access your app in a browser, the port is always 80. Hence, to know which app an incoming HTTP request is looking for, the server must be looking into the HTTP headers. (For example, using HOST to find out the app name, then resolve the app name to an internal port number.)

    Finally, Heroku decided to hide away the internal ports from the internet. This, along with the fact that TCP connections don't have a HOST field, makes it impossible to host a TCP server with Heroku.

    To work around this, use WebSocket.

    Appendix: the Research

    • Testing was done with a free-tier Heroku app, in March 2020.
    • If you make up a non-existing app name (e.g. https://hr.herokuapp.com), Heroku responds with a page saying "There's nothing here, yet."
    • If you first manually nslookup an existing app (e.g. https://world-of-blogs.herokuapp.com), then try to use the IP address to access the app, Heroku also responds with a page saying "There's nothing here, yet."
    0 讨论(0)
  • 2021-02-10 10:47

    Heroku doesn't support a generic TCP server but you should be able to get the functionality you want with socket.io.

    You need to put web in your Procfile. That's what lets Heroku bind an external connection to port 80 to the local port your web traffic will arrive you. You find that port by looking at the environment variable $PORT. More info, with examples, is here: https://devcenter.heroku.com/articles/nodejs

    0 讨论(0)
提交回复
热议问题