v3.5.2025.1001
大石头 authored at 2025-10-02 01:20:22
2.57 KiB
NewLife.Remoting
# NewLife.Remoting ¹Ø¼üʱÐòͼ ±¾Îļþ¸ø³öµäÐ͵÷ÓÃÓë´¦ÀíµÄʱÐò£¬°üÀ¨£º¿Í»§¶Ë·¢Æð RPC¡¢401 ´¥·¢µÇÂ¼ÖØÊÔ¡¢·þÎñ¶Ë´¦ÀíÇëÇóµÄÍêÕûÁ´Â·¡£ ## 1. ¿Í»§¶Ë·¢Æð RPC µ÷Ó㨳ɹ¦£© ```mermaid sequenceDiagram autonumber participant App as Application participant AC as ApiClient participant CL as Cluster participant SC as ISocketClient participant ENC as IEncoder participant Svr as IApiServer App->>AC: InvokeAsync(action, args) AC->>AC: Open() AC->>CL: Get() CL-->>AC: ISocketClient AC->>ENC: CreateRequest(action, args) ENC-->>AC: IMessage(req) AC->>SC: SendMessageAsync(req) SC->>Svr: req Svr-->>SC: rsp SC-->>AC: IMessage(rsp) AC->>ENC: Decode(rsp) ENC-->>AC: ApiMessage(code,data) AC-->>App: TResult AC->>CL: Return(client) ``` ## 2. ¿Í»§¶Ë 401 ´¥·¢µÇ¼ºóÖØ·¢ ```mermaid sequenceDiagram autonumber participant App as Application participant AC as ApiClient participant CL as Cluster participant SC as ISocketClient participant ENC as IEncoder participant Svr as IApiServer App->>AC: InvokeAsync(action, args) AC->>CL: Get() AC->>ENC: CreateRequest() AC->>SC: SendMessageAsync() SC->>Svr: req Svr-->>SC: rsp(401) SC-->>AC: IMessage(rsp) AC->>ENC: Decode(rsp) ENC-->>AC: ApiMessage(Unauthorized) AC->>AC: catch ApiException(401) AC->>AC: OnLoginAsync(force=true) AC->>SC: µÇ¼¶¯×÷£¨ÊµÏÖ·½×Ô¶¨Ò壩 AC->>ENC: CreateRequest() AC->>SC: SendMessageAsync() SC->>Svr: req Svr-->>SC: rsp(200) SC-->>AC: IMessage(rsp) AC->>ENC: Decode(rsp) ENC-->>AC: ApiMessage(Ok, data) AC-->>App: TResult AC->>CL: Return(client) ``` ## 3. ·þÎñ¶Ë´¦ÀíÇëÇó ```mermaid sequenceDiagram autonumber participant SC as ISocketClient participant Svr as IApiServer participant AS as ApiServer participant ENC as IEncoder participant H as IApiHandler participant M as IApiManager SC->>Svr: IMessage(req) Svr->>AS: Process(session, msg, sp) AS->>ENC: Decode(msg) ENC-->>AS: ApiMessage(action,args) AS->>AS: Tracer.NewSpan("rps:"+action) AS->>AS: Received?.Invoke(...) AS->>H: Execute(session, action, args, msg, sp) H->>M: Find(action)/CreateController M-->>H: ApiAction/Controller H-->>AS: result AS->>ENC: CreateResponse(msg, action, code, result) ENC-->>AS: IMessage(rsp) AS-->>Svr: rsp ``` ±¸×¢£º - µ¥Ïòµ÷Óãº`msg.OneWay == true` ʱ£¬·þÎñ¶Ë `Process` Ö±½Ó·µ»Ø `null`£¬²»Ó¦´ð¡£ - Âý×·×Ù£º¿Í»§¶Ë `InvokeWithClientAsync` Óë·þÎñ¶Ë `Process` ¾ùÔÚ `finally` ¼Ç¼³¬¹ý `SlowTrace` µÄµ÷ÓÃ/´¦ÀíÈÕÖ¾¡£