Service(服務)

定義

服務(Service)是 ROS2 裡「一問一答」的通訊模式:Client 送出一個請求(Request),Server 處理後回傳一個回應(Response),跟主題的多對多廣播模式不同,服務通訊是一對一、有明確配對關係的。

關鍵特性

  • 同步語意,非同步實作:呼叫服務在概念上是「問了要等答案」,但 rclpy 的實際呼叫是非同步的,回傳一個 Future 物件,需要另外等待它完成。
  • 禁止在 callback 裡同步阻塞等待:如果在節點自己的 callback 內部同步等待另一個服務呼叫完成,且用的是單執行緒 Executor,會造成死鎖——因為處理回應的 callback 永遠排不到執行機會。
  • 無伺服器時請求會卡住:Client 呼叫一個當下不存在 Server 的服務,預設會持續等待,不會自動逾時失敗。

使用情境

  • 觸發一次性、有明確成功/失敗結果的操作,例如「計算兩數之和」「查詢目前地圖」。
  • 不適合用在需要持續、高頻率更新的資料流,那類情境應該用主題。

延伸閱讀