• IceRPC之调度管道->快乐的RPC


    作者引言

    很高兴啊,我们来到了IceRPC之调度管道->快乐的RPC, 基础引导,有点小压力,打好基础,才能让自已不在迷茫,快乐的畅游世界。

    调度管道 Dispatch pipeline

    了解如何接受请求并返回响应。

    定义

    接受/完成请求,并返回响应的过程称为调度

    调度通常由服务器连接创建: 服务器连接,接收请求并返回响应。

    然而,由于客户端和服务器连接具有相同的功能,因此客户端连接,也可以调度请求。

    调度抽象

    当连接接收到请求时,它会使用其配置的调度程序,调度此请求。该调度程序是接受传入请求,并返回传出响应的抽象。它是调用者invoker抽象服务器端的对应部分。

    InvokerDispatcher 之间的一个重要区别,是需要实现 Dispatcher 抽象来满足请求并生成响应。Invoker 抽象由 IceRPC 的连接实现。

    C# 中, 这个调度器抽象是 IDispatcher 接口:

    namespace IceRpc;
    
    public interface IDispatcher
    {
        ValueTask 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
      路由器根据请求的路径,将请求路由到,在该路由器注册的调度程序。还可以托管多一个中间件。

    --- title: 一个简单的调度管道 --- flowchart LR connection -- request --> middleware -- request --> service[Slice service] service -- response --> middleware -- response --> connection

    作者结语

    • 一直做,不停做,才能提升速度
    • 翻译的不好,请手下留情,谢谢
    • 如果对我有点小兴趣,如可加我哦,一起探讨人生,探讨道的世界
    • 觉得还不错的话,点个
      image
  • 相关阅读:
    有一个带头结点的单链表L,设计一个算法使其元素递增有序
    小鹏汽车在滴滴上眺望远方
    cpp报错:C-struct error-Field has incomplete type
    [Android] [解决]Bottom Navigation Views Activity工程带来的fragment底部遮盖的问题
    python+windows画图工具--复现别人论文中的colormap 方法2
    领先实践|全球最大红酒App如何用设计冲刺创新vivino模式
    (计算机组成原理)第二章数据的表示和运算-第一节3:无符号数的表示和运算
    考研:研究生考试(五天学完)之《线性代数与空间解析几何》研究生学霸重点知识点总结之第二课矩阵及其运算
    西门子PLC S7-200和S7-300有什么差别?如何进行远程上下载?
    DAY17-深度学习100例-卷积神经网络(CNN)识别眼睛状态
  • 原文地址:https://www.cnblogs.com/xlgwr/p/18212263