Service(服務)
定義
服務(Service)是 ROS2 裡「一問一答」的通訊模式:Client 送出一個請求(Request),Server 處理後回傳一個回應(Response),跟主題的多對多廣播模式不同,服務通訊是一對一、有明確配對關係的。
關鍵特性
- 同步語意,非同步實作:呼叫服務在概念上是「問了要等答案」,但
rclpy的實際呼叫是非同步的,回傳一個Future物件,需要另外等待它完成。 - 禁止在 callback 裡同步阻塞等待:如果在節點自己的 callback 內部同步等待另一個服務呼叫完成,且用的是單執行緒 Executor,會造成死鎖——因為處理回應的 callback 永遠排不到執行機會。
- 無伺服器時請求會卡住:Client 呼叫一個當下不存在 Server 的服務,預設會持續等待,不會自動逾時失敗。
使用情境
- 觸發一次性、有明確成功/失敗結果的操作,例如「計算兩數之和」「查詢目前地圖」。
- 不適合用在需要持續、高頻率更新的資料流,那類情境應該用主題。