如何使用 Heroku 託管本機伺服器?

如何使用 Heroku 託管本機伺服器?

我想在我的筆記型電腦上託管一個運行的 Node.js 網站,以便其他人可以訪問該網站。我努力了轉送連接埠在我的路由器上,但​​它不起作用,因為我的 ISP 已停止向家庭用戶提供公共 IP 位址。我能想到的另一個解決方案是使用赫羅庫主持某種類型的反向代理,透過它可以訪問該網站。

我看過一些反向代理寫成Node.js國家公共管理,但他們似乎對隧道和公共伺服器使用單獨的端口,這Heroku 不允許。儘管 Heroku 只允許一個端口,但我仍然認為有一些方法仍然可以工作:

  • 將第一個 websocket 使用者視為客戶端(網站)。
  • 將具有特定 url 的 websocket 使用者視為客戶端(網站)。

由於多個用戶可能同時連接到代理,因此可能需要包含一個ID在對客戶(網站)的每個請求/回應中。

是否有某些軟體包可以提供此功能,或以其他方式允許客戶端位於 NAT 之後,同時仍僅使用一個連接埠?

答案1

我想,當我還是個孩子的時候,我就開始尋找舉辦活動的方法公共伺服器本地伺服器國家公共管理。搜尋關鍵字如:

  • 反向代理
  • WS隧道
  • 反向HTTP
  • TCP隧道

嘗試過 ws 隧道:
它需要一個分離連接埠用於WebSocket 連接,以及一個用於託管的單獨端口網路伺服器。即使這樣也能行得通,赫羅庫只允許1個連接埠正在使用,不知道還有沒有其他的雲端提供者會允許2個公共端口(我覺得這是不可能的)。

嘗試反向http:
它可以充當反向HTTP客戶端。反向HTTP是IETF提供的協定。但是,然後我需要一個反向HTTP伺服器。但是仍然存在一個問題反向HTTP,因為它只能串流一次一個請求。它基本上是一個反向的 HTTP 連接公共伺服器本地伺服器。這意味著我必須以某種方式將多個用戶的請求序列化到一個或多個連接(多個反向 HTTP 連接必須在之間設置本地伺服器公共伺服器)。

嘗試使用 TCP 封包:
然後我意識到可以使用單一連接和更簡單的非緩衝代理方法來完成此操作。反向HTTP如果有新連接,則可能需要緩衝,並且所有反向 HTTP 連接正在使用中。考慮使用以下格式的簡單資料包:

--------------------------------------
| Packet Size | Connection ID | Data |
--------------------------------------

我正在尋找一種使用 WebSockets 來做到這一點的方法,如果它們有一些我可以使用的現有功能,但後來我看到 Heroku 允許任何HTTP 升級,所以我決定繼續進行 TCP 升級。我知道,我做到了。這是標題的樣子,我檢查了 Heroku 是否接受它:

GET / HTTP/1.1
Upgrade: tcp
Connection: Upgrade
Origin: XXX

好的,現在有了一個想法,如何使用 TCP 升級本地伺服器和公共伺服器之間的連接,然後使用資料包進行通訊。然而,資料包格式仍然無法告訴我們使用者是否已連線或已斷開連線。它僅告訴我們用戶發送了哪些數據。所以我在資料包中添加了另一個欄位:

----------------------------------------------
| Packet Size | Event | Connection ID | Data |
----------------------------------------------

尚未解決的一個問題是區分用戶連接和本地伺服器連接,因為我們對它們使用相同的連接埠。可能有很多方法可以做到這一點,但我決定採用特定User-Agent於本地伺服器的方法。

更多的疑惑,是使用Node的HTTP還是使用Node的TCP來建構公共伺服器程式碼。這次,我正在閱讀有關分塊編碼、預告片的內容,並決定使用 TCP 會更好。因此,我必須解析連接的初始請求,並根據確定的類型,作為使用者或本機伺服器處理請求。但我想像會出現效能問題,因為我會解析每個連線的 HTTP 標頭。但如果我們使用罕見的 HTTP 方法來快速區分,例如HEAD,我們只需讀取 4 個字元。所以我們現在可以這樣做:

1. If first 4 characters not HEAD, process as User.
2. Parse all the HTTP headers.
3. If User-Agent is special value, process as Local server
4. Process as User.

我現在還添加了對多個通道的支持,現在可以讓我作為在另一台電腦(私人 IP)上運行的 SSH 伺服器進行存取。移動程式碼並修飾 README:https://github.com/nodef/rhost

我在搜尋時發現了一些有趣的頁面:

相關內容