2016-12-03 47 views
0

如果我在AWS S3(也可能使用CloudFront)上有一個非常酷的靜態站點,因爲它可以輕鬆擴展,並具有零宕機時間部署,因爲您只是更新靜態資產,並分發到邊緣位置,嗚呼!如何在我的AWS上的靜態網站上運行socket.io

但是,如果我想在聯繫頁面上使用Socket.io進行一些實時聊天支持功能,我該如何告訴Amazon處理Websockets?我可以使用Route53來做一些與Websocket請求不同的特定域名,例如將它們重定向到Lambda? (Lambda無法運行socket.io嗎?)

+2

據我所知,您需要在EC2服務器上運行socket.io。你將無法在Lambda上運行它。 –

回答

1

與您的other question類似,此處的答案涉及DNS未涉及路徑解析的事實,因此Route 53不是此問題的一個因素。

Socket.io幾乎肯定會需要服務器,並且通過CloudFront連接似乎不太可能。

雖然我不熟悉socket.io的底層傳輸協議(s?),但我沒有看到解決辦法。 CloudFront是一種反向代理,僅支持正確的標準HTTP請求/響應行爲,這不適合實時的面向事件的操作。儘管Socket.io可能不需要它們,並且可能具有回退到兼容行爲的靈活性,但如果可能的話,它最多也是次優的,因爲即使使用長輪詢(效率低下),CloudFront也不支持websocket ),因爲CloudFront具有30秒的固定超時定時器,所以無法修改,因此單個響應的時間限制在30秒以內。

類似地,通過API網關訪問的Lambda函數僅適用於處理單個HTTP請求/響應循環,而不是任何持久的處理,也沒有用於處理跨請求「狀態」的內在機制。

我的假設是,你需要一臺或多臺服務器在ELB Classic負載平衡器後面加上SSL,並以TCP模式運行,使用站點域的子域,將瀏覽器連接到後端以實現持久性連接。

即使這個答案有幫助,但我確實不確定它是否有足夠的幫助......所以你可能希望不要接受它,因爲有人可能會出現並提供一個更深入研究的答案socket.io的內部以及如何與CloudFront進行互操作,如果這種互操作是可能的話。

相關問題