Arrow Flight RPC#
Arrow Flight 是一個 RPC 框架,用於透過網路高效傳輸 Flight 資料。
另請參閱
- Flight 協定文件
Flight 協定的文件,包括概念上如何使用 Flight。
- Flight API 文件
Python API 文件,列出所有各種用戶端和伺服器類別。
- Python 食譜
在 Python 中使用 Arrow Flight 的範例。
撰寫 Flight 服務#
伺服器是 FlightServerBase
的子類別。若要實作個別的 RPC,請覆寫此類別上的 RPC 方法。
import pyarrow.flight as flight
class MyFlightServer(flight.FlightServerBase):
def list_flights(self, context, criteria):
info = flight.FlightInfo(...)
yield info
每個 RPC 方法都總是會取得 ServerCallContext
以取得常見參數。若要指出失敗,請引發例外;Flight 特定的錯誤可以透過引發 FlightError
的子類別之一來表示。
若要啟動伺服器,請建立一個 Location
以指定要接聽的位置,並建立伺服器的執行個體。(字串將會轉換為位置。)這將啟動伺服器,但不會封鎖程式的其餘部分。呼叫 FlightServerBase.serve()
以封鎖直到伺服器停止。
# Listen to all interfaces on a free port
server = MyFlightServer("grpc://0.0.0.0:0")
print("Server listening on port", server.port)
server.serve()
使用 Flight 用戶端#
若要連線到 Flight 服務,請使用位置呼叫 pyarrow.flight.connect()
。
取消與逾時#
在進行呼叫時,用戶端可以選擇性地提供 FlightCallOptions
。這允許用戶端設定呼叫的逾時或提供自訂 HTTP 標頭等功能。此外,用戶端 RPC 呼叫傳回的一些物件會公開一個 cancel
方法,允許提早終止呼叫。
在伺服器端,逾時是透明的。對於取消,伺服器需要手動輪詢 ServerCallContext.is_cancelled()
以檢查用戶端是否已取消呼叫,如果是,則跳出伺服器目前正在執行的任何處理。
啟用 TLS#
設定伺服器時,可以透過提供憑證和金鑰組給 FlightServerBase
來啟用 TLS。
在用戶端,使用 Location.for_grpc_tls()
來建構要接聽的 Location
。
啟用驗證#
警告
在未啟用 TLS 的情況下,驗證是不安全的。
可以透過實作 ServerAuthHandler
來啟用基於握手的驗證。驗證包含兩個部分:在初始用戶端連線時,伺服器和用戶端驗證實作可以執行任何需要的協商;然後,在之後的每個 RPC 上,用戶端都會提供權杖。伺服器驗證處理常式會驗證權杖並提供用戶端的身份。此身份可以從 ServerCallContext
取得。
自訂中介軟體#
伺服器和用戶端支援自訂中介軟體(或攔截器),這些中介軟體會在每個請求上呼叫,並且可以有限度地修改請求。這些可以透過子類別化 ServerMiddleware
和 ClientMiddleware
來實作,然後在建立用戶端或伺服器時提供它們。
中介軟體相當有限,但它們可以將標頭新增至請求/回應。在伺服器上,它們可以檢查傳入的標頭並使請求失敗;因此,它們可以用於實作自訂驗證方法。