IceRPC之多路复用传输>快乐的RPC
作者引言
很高兴啊,我们来到了IceRPC之多路复用传输>快乐的RPC,基础引导,打好基础,才能让自已不在迷茫,快乐的畅游世界。
icerpc 和多路复用传输
了解 icerpc 协议和多路复用传输
icerpc 协议
当创建到服务器地址 icerpc://hello.zeroc.com 的客户端连接时,指示 IceRPC 建立使用 icerpc 协议的连接。
icerpc 是一种应用层协议,通过多路复用连接传输 RPC(请求和响应)。
在讨论 icerpc 协议时,我们总是用小写拼写 icerpc。这避免了与 IceRPC 框架的混淆
多路复用传输
路复用传输页面,描述了在连接内提供独立流的现代传输的抽象。比如,典型的多路复用传输是QUIC 。
icerpc 连接在由多路复用传输,创建的多路复用连接,上运行。
title: icerpc over quic
---
classDiagram
class IceRpcConnection
class MultiplexedConnection {
<<abstraction>>
}
class QuicConnection
IceRpcConnection o-- MultiplexedConnection
MultiplexedConnection <|-- QuicConnection
icerpc 协议通过为每个请求 + 响应对创建专用双向流,通过多路复用连接发送请求和响应。它为每个单向请求创建单向流,因为单向请求没有响应。
title: RPCs mapped to streams by icerpc
---
flowchart LR
subgraph Client [icerpc client connection]
end
subgraph Server [icerpc server connection]
end
subgraph stream0 [stream]
s0["> request >\n < response <"]
end
subgraph stream1 [stream]
s1["< request <\n > response >"]
end
subgraph stream2 [stream]
s2["> one-way request >"]
end
subgraph stream3 [stream]
s3["> request >\n < response <"]
end
subgraph stream4 [stream]
s4["< one-way request <"]
end
Client --- s0
Client --- s1
Client --- s2
Client --- s3
Client --- s4
s0 --- Server
s1 --- Server
s2 --- Server
s3 --- Server
s4 --- Server
由于每个流都是独立的,因此不存在队头阻塞。 可以通过同一连接发送大小请求和响应的组合:大请求和响应不会阻止,或延迟小请求和响应。
IceRPC 的首选协议
icerpc 自然是 IceRPC 的首选协议。
icerpc 提供了 IceRPC API 和功能的最直接实现。 特别是,IceRPC 的请求字段、响应字段和状态码按原样由 icerpc 传输。它还支持有效负载连续性。
icerpc 通过双工连接
目前只有一种标准复用传输: QUIC。 由于 QUIC 是新的且不普遍可用,因此可能需要将 icerpc 与传统的双工传输(例如 TCP)一起使用。
解决方案是 IceRPC 的 Slic 传输层。Slic 在双工传输抽象上实现复用传输抽象。
title: icerpc over tcp
---
classDiagram
class IceRpcConnection
class MultiplexedConnection {
<<abstraction>>
}
class SlicConnection
class DuplexConnection {
<<abstraction>>
}
class TcpConnection
IceRpcConnection o-- MultiplexedConnection
MultiplexedConnection <|-- SlicConnection
SlicConnection o-- DuplexConnection
DuplexConnection <|-- TcpConnection
C# 中,默认的多路复用传输是 TCP 上的 Slic,称为 tcp。以下语句都创建等效的 icerpc 连接。
// Create a client connection with the default multiplexed client transport, Slic over TCP.
using await var clientConnection = new ClientConnection("icerpc://hello.zeroc.com");
// Make sure we use Slic over TCP (correct but redundant).
using await var clientConnection = new ClientConnection("icerpc://hello.zeroc.com?transport=tcp");
// Create a new multiplexed client transport with default options.
var clientTransport = new SlicClientTransport(new TcpClientTransport());
using await var clientConnection = new ClientConnection(
"icerpc://hello.zeroc.com",
multiplexedClientTransport: clientTransport);
收尾
最近写的都是基础相关的概念,大家看看就行,还以官方为主。
作者结语
- 一直做,不停做,才能提升速度
- 翻译的不好,请手下留情,谢谢
- 如果对我有点小兴趣,如可加我哦,一起探讨人生,探讨道的世界。
- 觉得还不错的话,点个赞哦

IceRPC之多路复用传输>快乐的RPC的更多相关文章
- RPC 核心,万变不离其宗
微信搜 「yes的练级攻略」干货满满,不然来掐我,回复[123]一份20W字的算法刷题笔记等你来领. 个人文章汇总:https://github.com/yessimida/yes 欢迎 star ! ...
- 初识RPC协议
什么是rpc框架 先回答第一个问题:什么是RPC框架? 如果用一句话概括RPC就是:远程调用框架(Remote Procedure Call) 那什么是远程调用? 通常我们调用一个php中的方法,比如 ...
- RPC是什么
RPC是什么? 通俗的讲就是,调用远程计算机上的服务,就像调用本地服务一样.通常包含传输协议和编码协议. RPC可以基于HTTP或TCP协议,但基于HTTP协议的RPC性能却不如基于TCP协议的RPC ...
- RPC远程过程调用
什么是RPC: 将一个函数运行在远程计算机上并且等待获取那里的结果,这个称作RPC: (Remote Procedure Call远程过程调用) RPC是一个计算机通信协议. rpc指的是在计算机A上 ...
- 040 Http与RPC
一直在说,但是没有系统的文档理解过. 1.本质 目前有很多Java的RPC框架,有基于Json的,有基于XML,也有基于二进制对象的. 他们最本质的区别,就是RPC主要是基于TCP/IP协议的,而HT ...
- 网络编程 -- RPC实现原理 -- 目录
-- 啦啦啦 -- 网络编程 -- RPC实现原理 -- NIO单线程 网络编程 -- RPC实现原理 -- NIO多线程 -- 迭代版本V1 网络编程 -- RPC实现原理 -- NIO多线程 -- ...
- RPC框架之RMI
一:RPC 远程过程调用 RPC(Remote Procedure Call Protocol)远程过程调用协议,通过网络从远程计算机上请求调用某种服务. 一次RPC调用的过程大概有10步: 1.执 ...
- 什么是XML RPC?
# -*- coding: cp936 -*- #python 27 #xiaodeng #什么是XML RPC? #中文叫:远程过程调用 #使用http协议做传输协议的rpc机制,使用xml文本的方 ...
- Python与RPC -- (转)
XML-RPC xmlrpc是使用http协议做为传输协议的rpc机制,使用xml文本的方式传输命令和数据. 一个rpc系统,必然包括2个部分: 1)rpc client,用来向rpc server调 ...
- RPC数据通信
RPC全称为Remote Procedure Call,翻译过来为“远程过程调用”.目前,主流的平台中都支持各种远程调用技术,以满足分布式系统架构中不同的系统之间的远程通信和相互调用.远程调用的应用场 ...
随机推荐
- Prometheus AlertManager 生产实践-直接根据 to_email label 发 alert 到对应邮箱
概述 通过之前的文章 - Prometheus Alertmanager 生产配置趟过的坑总结, 我们已经知道 AlertManager 作为告警平台,是非常强大的,可以去重 (deduplicati ...
- HarmonyOS应用侧与前端页面数据通道建立
一. 应用侧调用前端页面函数 应用侧可以通过runJavaScript()方法调用前端页面的JavaScript相关函数.在下面的示例中,点击应用侧的"runJavaScript" ...
- spring boot 手动value和自动注入配置的区别[五]
前言 前面两篇中,写道我们注入配置的方式,是通过是注解的方式完成,如下: @ConfigurationProperties(prefix ="person") 这意味着: 我们写一 ...
- asp .net core 单页应用
前言 单页应用其实就是 asp.net core 来作为js service,个人觉得这样更好调试,这种比较适合中小型业务. 正文 因为自己写过混合app是ionic,那么就尝试一下angular的单 ...
- 顺通鞋服进销存OA管理系统
鞋服进销存OA管理系统通过十几年的积淀与创新,顺通与众多鞋服企业一起共创,形成了涵盖协同办公.移动办公.知识管理.数据运营.多维门户等领域,以鞋服新品研发管理.生产排班管理.门店一体化管理.市场费用管 ...
- 力扣477(java)-汉明距离总和(中等)
题目: 两个整数的 汉明距离 指的是这两个数字的二进制数对应位不同的数量. 给你一个整数数组 nums,请你计算并返回 nums 中任意两个数之间 汉明距离的总和 . 示例 1: 输入:nums = ...
- 一遇到复杂分析查询就卡顿?MySQL分析实例了解一下
随着企业数据爆发式增长,MySQL分析查询卡顿问题越来越多,用户时效性不能保证,精细化运营诉求不能满足.如何能无缝对接业务库,实现毫秒级针对万亿级数据进行即时的多维分析透视和业务探索,MySQL分析实 ...
- 如何避免 Go 命令行执行产生“孤儿”进程?
简介: 在 Go 程序当中,如果我们要执行命令时,通常会使用 exec.Command ,也比较好用,通常状况下,可以达到我们的目的,如果我们逻辑当中,需要终止这个进程,则可以快速使用 cmd.Pro ...
- Flink 在顺丰的应用实践
简介: 顺丰基于 Flink 建设实时数仓的思路,引入 Hudi On Flink 加速数仓宽表,以及实时数仓平台化建设的实践. 本⽂由社区志愿者苗文婷整理,内容源⾃顺丰科技大数据平台研发工程师龙逸 ...
- WinDbg 设置在加载到某个 DLL 进入断点
本文记录如何在 WinDbg 里,设置在加载到某个 DLL 时,自动进入断点.通过此方式用来定位是哪个业务模块加载了某个 DLL 模块 在 WinDbg 里面,可以附加到现有进程,也可以启动某个进程. ...