簡體   English   中英

將 TCP 服務器部署到 Heroku

[英]Deploying a TCP server to Heroku

我有一個用 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? 以及如何將其更改為我想要的端口?

事實上,如果我不更改它,我怎么知道它是什么以便我的應用程序可以連接到這個服務器?

Heroku 不支持通用 TCP 服務器,但您應該能夠通過 socket.io 獲得您想要的功能。

你需要把 web 放在你的 Procfile 中。 這就是讓 Heroku 將外部連接綁定到端口 80 到您的網絡流量將到達您的本地端口的原因。 您可以通過查看環境變量 $PORT 找到該端口。 更多信息和示例,在這里: https : //devcenter.heroku.com/articles/nodejs

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 也會響應一個頁面說“這里什么都沒有,但.”

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM