開發 API 服務(DEVELOPING API SERVICES)

前言大綱

為了擴展 Spot 的功能,可能需要在 Spot 附帶的板載服務之外提供服務。附加服務可以從第三方傳感器收集數據,觸發機器人外部的動作,或實時處理收集的數據。

界面Interface

開發的服務應符合所有 Spot 服務使用的相同服務接口標準。

機器人目錄Robot Directory

客戶端可以通過 Spot 發出請求來與第三方服務進行通信。 服務應該在機器人目錄中註冊自己,這將使機器人能夠將任何請求重新路由到託管服務的網絡位置。 在註冊時,服務需要聲明其服務名稱、權限、類型和網絡位置。

gRPC

服務應設計為處理在相應的 gRPC protobuf 服務定義中定義的所有可能的 RPC。可以使用 Spot SDK 中包含的相同 protobuf 服務定義或定義全新的服務定義。相同類型的客戶端請求將根據服務名稱和權限路由到適當的服務,每個服務這兩者都必須是唯一的。

基本結構Basic Structure

服務商Servicers

gRPC 文檔中概述了編寫基本 gRPC 服務所需的所有信息,此處不再贅述。

基礎設施Infrastructure

建立服務有兩個組成部分:啟動服務器和向機器人註冊服務。

啟動服務器Starting a Server

服務器本身可以使用 Python grpc 函式庫啟動。 Spot Python SDK 提供了函式庫的幫助程序,使管理服務器變得更容易。下面顯示了運行 gRPC 服務的代碼示例。
# Proto service specific function used to attach a servicer to a server.
add_servicer_to_server_fn = image_service_pb2_grpc.add_ImageServiceServicer_to_server

# Instance of the servicer to be run.
service_servicer = WebCamImageServicer()
service_runner = GrpcServiceRunner(service_servicer, add_servicer_to_server_fn, port, logger=logger)

# Run the server until a SIGINT is received.
service_runner.run_until_interrupt()
image_service_pb2_grpc.add_ImageServiceServicer_to_server 是一個從 protobuf 服務定義自動生成的函數。該函數將一個服務程序鏈接到一個服務器,並為每個編譯的 protobuf 服務器生成。WebCamImageServicer 是一個自定義類,它繼承自 protobuf 服務定義自動生成的服務類。它定義了響應所有可能的服務請求的方法。 GrpcServiceRunner 類別將創建並運行與傳入的服務程序關聯的服務器物件。它將監視給定端口上的請求。 run_until_interrupt() 方法 可用於使服務器保持活動狀態,直到它收到 SIGINT

註冊服務Registering a Service

註冊服務需要與機器人通信。服務可以通過 Python SDK 提供的目錄註冊客戶端註冊自己。每個服務實例都應該有一個唯一的服務名稱、服務權限和與之關聯的服務類型,這些都在註冊時提供。這些詳細信息將使 Spot 能夠將客戶端請求路由到適當的服務。註冊服務的首選方法如下所示。請注意,它註冊了一個目錄保持活動,並將啟用活動監控。
dir_reg_client = robot.ensure_client(DirectoryRegistrationClient.default_service_name)
keep_alive = DirectoryRegistrationKeepAlive(dir_reg_client)
keep_alive.start({DIRECTORY_NAME}, {SERVICE_TYPE}, {SERVICE_AUTHORITY}, {SERVICE_IP}, {SERVICE_PORT})

with keep_alive:
	# More code

範例Examples

Spot SDK 提供了無數範例,展示瞭如何開發機器人外 Python gRPC 服務。


參考資料

特色、摘要,Feature、Summary:

關鍵字、標籤,Keyword、Tag:

留言

這個網誌中的熱門文章

Ubuntu 常用指令、分類與簡介

iptables的觀念與使用

網路設定必要參數IP、netmask(遮罩)、Gateway(閘道)、DNS

了解、分析登錄檔 - log

Python 與SQLite 資料庫

Blogger文章排版範本

Pandas 模組

如何撰寫Shell Script

查詢指令或設定 -Linux 線上手冊 - man

下載網頁使用 requests 模組