Python 2 適用的 Sockets API 總覽


通訊端僅適用於付費應用程式,且來自通訊端的流量是依連出頻寬計費。通訊端也有每日和每分鐘 (爆發) 配額的限制。Async IO (例如 Python 中的 Twisted) 不受支援。App Engine 僅支援傳出通訊端的標準 Python 通訊端模組 API。您可以使用下列陳述式直接匯入標準通訊端程式庫:

import socket

匯入 socket 的程式庫 (例如 poplibnntplib) 如果並未違反以下所列的限制和規定,則應可直接運作,無需進行修改。

雖然 App Engine 支援通訊端,但在使用通訊端時,仍需注意特定限制和行為。

您可以保留通訊端描述元並在 App Engine 執行個體之間傳送,例如部分的工作酬載。在此情況下,您可以在前端執行個體上開啟通訊端,然後將其傳送給後端執行個體使用。

在 1.8.1 以前版本的 SDK 中,您無法對通訊端呼叫 get/set 選項。(此操作會引發「未實作」的例外狀況。) 不過,Sockets API 現已允許此操作。

如果是支援的選項,對 getsockopt 發出的呼叫會傳回模擬值,對 setsockopt 發出的呼叫會遭到忽略而不發出任何通知。如果是不支援的選項,會持續產生錯誤。

支援的選項如下:

  • SO_KEEPALIVE
  • SO_DEBUG
  • TCP_NODELAY
  • SO_LINGER
  • SO_OOBINLINE
  • SO_SNDBUF
  • SO_RCVBUF
  • SO_REUSEADDR

限制和規定

App Engine 的通訊端支援具有下列限制:

  • 通訊端僅適用於付費應用程式。
  • 您無法建立監聽通訊端,只能建立傳出通訊端。
  • 不支援 FTP。
  • 根據預設,httplib 設為使用 urlfetch api;如需使用 socket 來規避 urlfetch 的限制,您可以變更這項預設設定,讓 httplib 改為使用通訊端。詳情請參閱設定 httplib 使用通訊端
  • 您只能使用 TCP 或 UDP,不能使用任意通訊協定。
  • 您無法繫結至特定 IP 位址或通訊埠。
  • 通訊埠 25 (SMTP) 已遭封鎖,但您仍可在提交通訊埠 587 中使用已驗證的 SMTP。
  • 私人、廣播、多點傳送和 Google IP 範圍已遭封鎖,但下面這些已加入許可清單的項目除外:

    • Google 公用 DNS:8.8.8.88.8.4.42001:4860:4860::88882001:4860:4860::8844 通訊埠 53
    • Gmail SMTPS:smtp.gmail.com 通訊埠 465 和 587
    • Gmail POP3S:pop.gmail.com 通訊埠 995
    • Gmail IMAPS:imap.gmail.com 通訊埠 993
  • 通訊端描述元與建立該描述元的 App Engine 應用程式相關,且無法轉移 (無法由其他應用程式使用)。

  • 系統可在通訊端閒置 2 分鐘後將其收回,但如有任何通訊端相關作業,通訊端有效時間會延長 2 分鐘。

  • 就目前而言,socket.gethostbyaddr() 並未在 Python 內實作。您仍可使用 Python SMTP 標準程式庫 (smtplib) 開啟連線:

    # Open a connection to my mail server
    s = smtplib.SMTP('smtp.mailhostingcompany.net', 587)
    

透過開發伺服器使用通訊端

您可以在開發伺服器使用通訊端執行及測試程式碼,不必使用任何特殊指令列參數。

透過 OpenSSL 使用通訊端

App Engine 支援 Python 2.7 執行階段使用原生 Python OpenSSL。您必須依照 OpenSSL 支援所述,將 app.yaml 檔案設定為載入 ssl 程式庫。

設定 httplib 使用通訊端

如果您是匯入 httplib,根據預設會使用 urlfetch api。若要將 httplib 改為使用通訊端,請在專案的 app.yaml 檔案中直接加上環境變數。

 env_variables:
   GAE_USE_SOCKETS_HTTPLIB : 'anyvalue'

此值可為包括空白字串在內的任何值。如果變數不受支援,httplib 將繼續使用 URLFetch。

使用通訊端的 App Engine 範例

如需使用通訊端的範例,請參閱 Google Cloud Platform GitHub 中的通訊端示範應用程式

本頁內容對您是否有任何幫助?請提供意見:

傳送您對下列選項的寶貴意見...

這個網頁
Python 2 適用的 App Engine 標準環境