简单的 RPC
一个基本的客户端 / 服务器 RPC, 用于通过 MessagePort 发送请求 .
这支持节点工人线索,Web Workers,或者任何可以提供MessagePortLike接口的东西.
通讯详情
客户端和服务器通过 MessagePort 发送消息进行通信.
export interface RPCMessage {
sig: 'RPC0';
/**
* A Unique identifier for the request/response.
* Ideally this is a randomUUID.
*/
id: RequestID;
/**
* The type of message being sent.
*/
type: 'request' | 'response' | 'cancel' | 'canceled' | 'ok' | 'ready';
}
export type RPCRequestType = 'request' | 'cancel' | 'ok' | 'ready';
export type RPCResponseType = 'response' | 'canceled' | 'ok' | 'ready';
信息有两种类型:请求和回应. 客户端发送请求而服务器发送回复.
RPC 请求
sequenceDiagram
participant C as Client
participant S as Server
participant W as Worker
C->>+S: Request <id>
S->>+W: Method
W->>-S: Result
S->>-C: Response <id>, Result
RPC 请求使用ACK
sequenceDiagram
participant C as Client
participant S as Server
participant W as Worker
C->>+S: Request <id>, ACK
S->>C: ACK <id>
S->>+W: Method
W->>-S: Result
S->>-C: Response <id>, Result
RPC 请求出错
sequenceDiagram
participant C as Client
participant S as Server
participant W as Worker
C->>+S: Request <id>, ACK
S->>C: ACK <id>
S->>+W: Method
W->>-S: Error
S->>-C: Response <id>, Error
确定请求
此请求用于检查服务器是否正常 .
sequenceDiagram
Client->>Server: OK <id>?
Server->>Client: OK <id>, Code 200
取消请求
取消请求用于取消或中止请求。 服务器接受请求并承认收到请求. 根据模式的不同,服务器要么立即响应而不等待工人确认取消,要么在回复前等待确认:
取消请求: 不等待
sequenceDiagram
participant C as Client
participant S as Server
participant W as Worker
C->>+S: Request <id>
S->>+W: Method
C->>S: Cancel <id>
S->>-C: Canceled <id>
S--xW: Cancel
W--x-S: Canceled
取消请求: 等待
sequenceDiagram
participant C as Client
participant S as Server
participant W as Worker
C->>+S: Request <id>
S->>+W: Method
C->>S: Cancel <id>, Wait
S--xW: Cancel
W-->>-S: Canceled
S->>-C: Canceled <id>
RPC 请求, 由服务器取消
可能会发生服务器需要取消请求的情况. 如果服务器正在处理中, 并且仍有待处理的请求, 可能会发生这种情况 。 它有几种方法可以做到这一点:
- 发送错误反应
- 发送已取消的答复
sequenceDiagram
participant C as Client
participant S as Server
participant W as Worker
C->>+S: Request <id>
S->>+W: Method
W--x-S: Canceled
S->>-C: Canceled <id>
中止
中止请求与取消请求相同,只有客户端不会等待响应,响应会被忽略.
sequenceDiagram
participant C as Client
participant S as Server
C->>S: Request <id>
C-->>S: Cancel <id>
S--xC: Canceled <id>