modify: call 构造信封协议(不修改调用方 payload)
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -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):
|
||||||
|
|||||||
Reference in New Issue
Block a user