透過 WebSocket 建立永久連線

您可以使用 WebSocket,在用戶端 (例如行動裝置或電腦) 和 App Engine 執行個體之間建立永久連線。這種開放式連線可讓用戶端和伺服器之間隨時雙向交換資料,因此可降低延遲時間,改善資源使用效率。

WebSocket

RFC 6455 中定義的 WebSocket 通訊協定會在用戶端和伺服器之間提供全雙工通訊管道,該管道是透過包含「upgrade」標頭的 HTTP(S) 要求啟動的。

WebSocket 的常見用途包括:

  • 即時事件更新,例如社交媒體動態饋給、體育賽事比分、新聞,或股市價格
  • 使用者通知,例如軟體或內容更新
  • 即時通訊應用程式
  • 協作編輯工具
  • 多人對戰遊戲

WebSocket 隨時可供您的應用程式使用,無須進行任何額外設定。 WebSocket 連線建立後經過 1 小時就會逾時。WebSocket 的使用量會依連線使用量計費,直到逾時或通訊端終止為止。

透過 WebSocket 執行範例應用程式

本文件中的程式碼範例說明如何使用 WebSocket 執行範例應用程式。

事前準備和設定

請按照「設定開發環境 」中的操作說明設定環境和專案,並瞭解應用程式的結構。

複製範例應用程式

將範例應用程式複製到您的本機電腦,然後前往 websockets 目錄:

在本機執行範例

在 App Engine 上部署並執行範例

工作階段相依性

部分用戶端並不支援 WebSocket。為因應這種情況,許多應用程式會採用 socket.io 這類程式庫,在遇到不支援 WebSocket 的用戶端時恢復使用 HTTP 長時間輪詢。

App Engine 通常會將要求平均分配到可用的執行個體, 但在使用 HTTP 長時間輪詢時,來自特定使用者的多項依序要求必須傳送到同一個執行個體。

如要讓 App Engine 將同一名使用者的要求傳送到同一個執行個體,您可以啟用工作階段相依性。這樣一來,App Engine 就會檢視 Cookie,辨識哪些要求是由同一名使用者送出,然後將這些要求轉送到同一個執行個體。

系統會盡可能實作 App Engine 中的工作階段相依性。開發應用程式時,建議您一律假設工作階段相依性不保證有效。 在下列情況下,用戶端可能會失去目標執行個體的相依性:

  • App Engine 自動配置器可以新增或移除為應用程式提供服務的執行個體。應用程式可能會重新分配負載,因此目標執行個體可能會變動。為了將此風險降到最低,請確認您已設定執行個體的數量下限以處理預期負載。
  • 如果目標執行個體未通過健康狀態檢查,App Engine 會將工作階段移到健康狀態良好的執行個體。如要進一步瞭解健康狀態檢查及其自訂選項,請參閱「分割健康狀態檢查」。
  • 如果執行個體因系統維護或軟體更新而重新啟動,就會失去工作階段相依性。App Engine 彈性環境 VM 執行個體每週會重新啟動一次。

由於工作階段相依性不保證有效,因此建議您只將這項功能運用於發揮 socket.io 和其他程式庫的功能,以便在連線中斷的情況下恢復使用 HTTP 長時間輪詢。切勿使用工作階段相依性來建構有狀態的應用程式。

啟用及停用工作階段相依性

根據預設,所有 App Engine 應用程式的工作階段相依性都為停用狀態。 工作階段相依性是在應用程式的版本層級設定,且可以在部署時啟用或停用。

如要為您的 App Engine 版本啟用工作階段相依性,請在 app.yaml 檔案中新增以下項目:

network:
  session_affinity: true

只要該版本使用最新的 app.yaml 部署完畢,系統就會開始透過同一個執行個體提供新的要求 (只要該執行個體可用)。

如要停用工作階段相依性,請從 app.yaml 檔案移除上述項目,或是將該項目的值設定為 false:

network:
  session_affinity: false