作者引言
很高興啊,我們來到了IceRPC之排程管道->快樂的RPC, 基礎引導,有點小壓力,打好基礎,才能讓自已不在迷茫,快樂的暢遊世界。
排程管道 Dispatch pipeline
瞭解如何接受請求並返回響應。
定義
接受/完成請求,並返回響應的過程稱為排程。
排程通常由伺服器連線建立: 伺服器連線,接收請求並返回響應。
然而,由於客戶端和伺服器連線
具有相同的功能,因此客戶端連線,也可以排程請求。
排程抽象
當連線接收到請求時,它會使用其配置的排程程式,排程此請求。該排程程式是接受傳入請求,並返回傳出響應的抽象。它是呼叫者invoker
抽象伺服器端的對應部分。
Invoker
和 Dispatcher
之間的一個重要區別,是需要實現 Dispatcher
抽象來滿足請求並生成響應。Invoker
抽象由 IceRPC
的連線實現。
C# 中, 這個排程器抽象是 IDispatcher
介面:
namespace IceRpc;
public interface IDispatcher
{
ValueTask<OutgoingResponse> DispatchAsync(
IncomingRequest request,
CancellationToken cancellationToken = default);
}
當構建接受此連線的伺服器時,會配置伺服器連線的排程程式。該排程程式不能為空。伺服器與其接受的所有連線
,共享其排程程式。例如:
// configures server to use a new Chatbot instance as its dispatcher
await using var server = new Server(new Chatbot());
為客戶端連線,配置排程程式是可選的
,因為客戶端連線,可以不接受請求。
C# 中,將客戶端連線的排程程式配置為 ConnectionOptions
類。例如:
using IceRpc;
// ClientConnectionOptions derives from ConnectionOptions
var clientConnectionOptions = new ClientConnectionOptions
{
Dispatcher = new MyCallback(),
ServerAddress = new Uri("icerpc://hello.zeroc.com")
};
await using var connection = new ClientConnection(clientConnectionOptions);
處理排程Dispatcher
排程抽象
提供了很大的靈活性。一個 Slice
服務是排程程式,因此很容易配置伺服器,將其收到的所有請求,排程到同一個 Slice
服務。
排程器,實現可以排程到,另一個排程器,該排程器本身,排程到另一個排程器,等等;
在伺服器上配置的排程程式,可以是排程程式鏈或樹的頭部,稱為"排程管道"dispatch pipeline
.
3種常見的排程型別:
-
Leaf dispatcher
這是排程管道中的子葉。例如,Slice 服務。 -
Middleware
中介軟體攔截排程,並將其轉發到"下一個"next
排程程式。IceRPC
提供了幾個內建的中介軟體,用於日誌記錄,壓縮等。 -
Router
路由器根據請求的路徑,將請求路由到,在該路由器註冊的排程程式。還可以託管多一箇中介軟體。
作者結語
- 一直做,不停做,才能提升速度
- 翻譯的不好,請手下留情,謝謝
- 如果對我有點小興趣,如可加我哦,一起探討人生,探討道的世界。
- 覺得還不錯的話,點個贊哦