modify: call 构造信封协议(不修改调用方 payload)

This commit is contained in:
2026-08-14 16:17:37 +08:00
parent a004a80a16
commit 3800d5fbb6
2 changed files with 16 additions and 3 deletions
+5 -1
View File
@@ -42,10 +42,14 @@ async with Client(session=zenoh_session) as client:
| `session` | `zenoh.Session` | Zenoh 会话对象 | | `session` | `zenoh.Session` | Zenoh 会话对象 |
| `worker_type` | `str` | Worker 类型名(如 `"example"`) | | `worker_type` | `str` | Worker 类型名(如 `"example"`) |
| `subject` | `str` | Zenoh 主题(如 `"example.add"`) | | `subject` | `str` | Zenoh 主题(如 `"example.add"`) |
| `payload` | `dict` | 调用载荷 | | `payload` | `dict` | 业务参数(自动封装为信封) |
| `method` | `str` | HTTP 方法(`"GET"` / `"POST"`) | | `method` | `str` | HTTP 方法(`"GET"` / `"POST"`) |
| `timeout` | `float` | 超时时间(秒) | | `timeout` | `float` | 超时时间(秒) |
> **信封协议**:`call()` 会把 `payload` 自动封装为
> `{"meta": {"method": ...}, "data": payload}` 发送,**不再修改调用方传入的 dict**;
> 若传入的 `payload` 已含 `meta`/`data` 结构则原样复用(仅补 `meta.method`)。
### 同步调用 ### 同步调用
```python ```python
+11 -2
View File
@@ -52,7 +52,16 @@ class Client:
timeout: float = 3.0, timeout: float = 3.0,
retries: int = 1, retries: int = 1,
) -> Dict[str, Any]: ) -> Dict[str, Any]:
payload.setdefault("_method", method.upper()) # 信封协议: {"meta": {...}, "data": {...}},不修改调用方的 payload。
# 若调用方已传信封结构则复用,仅补充 meta.method。
if isinstance(payload, dict) and ("meta" in payload or "data" in payload):
envelope = {
"meta": dict(payload.get("meta") or {}),
"data": payload.get("data") or {},
}
envelope["meta"].setdefault("method", method.upper())
else:
envelope = {"meta": {"method": method.upper()}, "data": payload}
full_key = "" full_key = ""
for attempt in range(retries + 1): for attempt in range(retries + 1):
workers = await self._get_workers(worker_type) workers = await self._get_workers(worker_type)
@@ -63,7 +72,7 @@ class Client:
try: try:
reply_iter = self._session.get( reply_iter = self._session.get(
full_key, full_key,
payload=orjson.dumps(payload), payload=orjson.dumps(envelope),
consolidation=zenoh.ConsolidationMode.NONE, consolidation=zenoh.ConsolidationMode.NONE,
) )
def _get_first(iterator): def _get_first(iterator):