Skip to content

Commit 89b8bf6

Browse files
author
zhouxuwen
committed
Site updated: 2022-02-09 18:17:54
1 parent 99bb13a commit 89b8bf6

File tree

3 files changed

+62
-62
lines changed

3 files changed

+62
-62
lines changed

2021/07/08/RPC系列(二)-gRPC入门/index.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,10 @@
3030
<meta property="article:published_time" content="2021-07-08T02:34:37.000Z">
3131
<meta property="article:modified_time" content="2022-02-09T08:54:45.288Z">
3232
<meta property="article:author" content="zhouxuwen">
33+
<meta property="article:tag" content="Golang">
3334
<meta property="article:tag" content="gRPC">
3435
<meta property="article:tag" content="RPC">
3536
<meta property="article:tag" content="ProtoBuf">
36-
<meta property="article:tag" content="Golang">
3737
<meta name="twitter:card" content="summary">
3838

3939
<link rel="canonical" href="http://yoursite.com/2021/07/08/RPC%E7%B3%BB%E5%88%97%EF%BC%88%E4%BA%8C%EF%BC%89-gRPC%E5%85%A5%E9%97%A8/">
@@ -319,10 +319,10 @@ <h3 id="项目源码"><a href="#项目源码" class="headerlink" title="项目
319319

320320
<footer class="post-footer">
321321
<div class="post-tags">
322+
<a href="/tags/Golang/" rel="tag"># Golang</a>
322323
<a href="/tags/gRPC/" rel="tag"># gRPC</a>
323324
<a href="/tags/RPC/" rel="tag"># RPC</a>
324325
<a href="/tags/ProtoBuf/" rel="tag"># ProtoBuf</a>
325-
<a href="/tags/Golang/" rel="tag"># Golang</a>
326326
</div>
327327

328328

css/main.css

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1168,7 +1168,7 @@ pre .javascript .function {
11681168
}
11691169
.links-of-author a::before,
11701170
.links-of-author span.exturl::before {
1171-
background: #49ff5d;
1171+
background: #149354;
11721172
border-radius: 50%;
11731173
content: ' ';
11741174
display: inline-block;

search.xml

Lines changed: 59 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,39 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<search>
3+
<entry>
4+
<title>Golang系列(一)-context使用</title>
5+
<url>/2021/07/12/Golang%E7%B3%BB%E5%88%97%EF%BC%88%E4%B8%80%EF%BC%89-context/</url>
6+
<content><![CDATA[<blockquote>
7+
<p>go的context包详解,context中文翻译过来叫“上下文”,本篇文章讲一下它具体的作用是什么。你在什么情况下可以用到它。</p>
8+
</blockquote>
9+
<a id="more"></a>
10+
11+
<h2 id="引言"><a href="#引言" class="headerlink" title="引言"></a>引言</h2><p>http server 常为每个请求创建一个 goroutine 以并发地处理请求,同时这个 goroutine 又会创建更多的 gotoutine 来访问数据库和缓存或RPC服务,当请求结束或被终止,能释放所有 gotoutine的资源。因此就需要一种机制,在goroutine之间传递信号消息。</p>
12+
<h2 id="简介"><a href="#简介" class="headerlink" title="简介"></a>简介</h2><p>context 中文翻译过来叫”上下文“,常被用来 goroutine 之间传递信息和信号的。信息和信号包括截至时间(deadline),取消信号(cancellation signals) 以及跨边界需要往下传递的键值对信息。</p>
13+
<h2 id="特性"><a href="#特性" class="headerlink" title="特性"></a>特性</h2><ul>
14+
<li>context的设计是可通过已有Context进行树型派生,已管理一组过程的生命周期。单Context是不可变的,但可以通过WithValue、WithCancel、WithTimeout方法进行派生并附加一些属性(键值、可取消、时限),以构建一组树型组织的context。</li>
15+
<li>当根 Context 结束时,所有由其派生出的 Context 也会被一并取消。也就是说,父 Context 的生命周期涵盖所有子 Context 的生命周期。</li>
16+
</ul>
17+
<h2 id="使用"><a href="#使用" class="headerlink" title="使用"></a>使用</h2><h3 id="创建根Context"><a href="#创建根Context" class="headerlink" title="创建根Context"></a>创建根Context</h3><p><code>context.Background() </code>创建一个空的Context(not nil), 常用作初始化创建根Context。</p>
18+
<h3 id="派生携带键值信息Context"><a href="#派生携带键值信息Context" class="headerlink" title="派生携带键值信息Context"></a>派生携带键值信息Context</h3><p><code>context.WithValue(parentContext, key, value)</code> 在父节点Context的基础上创建一个新的携带键值信息的的子节点Context。</p>
19+
<h3 id="派生可取消Context"><a href="#派生可取消Context" class="headerlink" title="派生可取消Context"></a>派生可取消Context</h3><p><code>context.WithCancel(parentContext) </code>在父节点Context的基础上创建一个新的可取消的子节点Context,返回新创建的子节点Context和取消方法cancelFunc。</p>
20+
<h3 id="派生有时间限制Context"><a href="#派生有时间限制Context" class="headerlink" title="派生有时间限制Context"></a>派生有时间限制Context</h3><p><code>context.WithTimeout(parentContext,timeout)</code>在父节点Context的基础上创建新的有时间限制的子节点Context,返回新创建子节点Context和取消方法cancelFunc。超过时间限制后,该Conext会发送信号到Done通道,所有子节点检测到信号立即退出。</p>
21+
<h3 id="派生有截至时间Context"><a href="#派生有截至时间Context" class="headerlink" title="派生有截至时间Context"></a>派生有截至时间Context</h3><p><code>context.WithDeadline(parentContext, time)</code>在父节点Context的基础上创建新的有截至时间的子节点Context,返回新创建子节点Context和取消方法cancelFunc。<code>context.Timeout(parentContext,timeout)</code>等价于<code>context.Deadline(parentContext,time.Now().Add(timeout))</code>。</p>
22+
<p>​ </p>
23+
<h2 id="注意"><a href="#注意" class="headerlink" title="注意"></a>注意</h2><ul>
24+
<li>Background 创建的根节点没有时限,也不能取消。</li>
25+
<li>WithCancel、WithTimeout、WithDeadline方法是从父context派生出新的context,新的context受限与父context的生命周期。新context应注意在对应过程结束后及时cancel,以防止goroutine泄露。</li>
26+
<li>不能使用nil Context,尽管语法上允许。不知道使用什么值合适时,可以使用 <code>context.TODO()</code>。</li>
27+
</ul>
28+
]]></content>
29+
<categories>
30+
<category>Golang</category>
31+
</categories>
32+
<tags>
33+
<tag>Golang</tag>
34+
<tag>context</tag>
35+
</tags>
36+
</entry>
337
<entry>
438
<title>RPC序列(三)-gRPC安全认证</title>
539
<url>/2021/07/15/RPC%E5%BA%8F%E5%88%97%EF%BC%88%E4%B8%89%EF%BC%89-gRPC%E5%AE%89%E5%85%A8%E8%AE%A4%E8%AF%81/</url>
@@ -69,6 +103,30 @@
69103
<tag>SSL/TLS</tag>
70104
</tags>
71105
</entry>
106+
<entry>
107+
<title>RPC系列(一)-RPC与RUST比较</title>
108+
<url>/2021/07/06/RPC%E7%B3%BB%E5%88%97%EF%BC%88%E4%B8%80%EF%BC%89-RPC%E4%B8%8ERUST%E6%AF%94%E8%BE%83/</url>
109+
<content><![CDATA[<blockquote>
110+
<p>本篇文章主要介绍RPC是什么,RPC的具体过程,RPC和RUST的比较以及如何选择。</p>
111+
</blockquote>
112+
<a id="more"></a>
113+
114+
<h2 id="RPC是什么"><a href="#RPC是什么" class="headerlink" title="RPC是什么"></a>RPC是什么</h2><p>RPC(Remote Procedure Call)是远程过程调用的简称。主要目的就是一个应用调用另一个应用的方法,调用方通过调用代理方法的形式调用被调用方的实现方法。调用协议常包括通信协议和序列化协议。底层的通信协议可以是HTTP、TCP等,根据不同的RPC框架而定。序列化协议常用ProtoBuf协议。</p>
115+
<h2 id="RPC具体过程"><a href="#RPC具体过程" class="headerlink" title="RPC具体过程"></a>RPC具体过程</h2><p><img src="/images/rpc%E5%85%B7%E4%BD%93%E6%B5%81%E7%A8%8B.png" alt="rpc具体流程"></p>
116+
<h2 id="RPC和RUST比较"><a href="#RPC和RUST比较" class="headerlink" title="RPC和RUST比较"></a>RPC和RUST比较</h2><p>RUST是基于HTTP协议的RESTFul API设计风格的通信方式,也常用于应用之间的信息通信。但设计理念和底层原理是完全不同的。</p>
117+
<p>HTTP+Rustful的优点是可读性好,支持跨语言。在运用之间通信的使用超越RPC。但缺点也很明显,HTTP是第七层协议,报文包含大量头部信息,有用信息占比少,因此效率和速度较低。另外使用HTTP协议调用接口封装封装,常需要封装很多参数以及校验方法。RPC则更好与其互补,但牺牲可读性来通过效率和性能是可取的。具体怎么选,需根据业务来,灵活站位。</p>
118+
<h2 id="RPC使用场景"><a href="#RPC使用场景" class="headerlink" title="RPC使用场景"></a>RPC使用场景</h2><p>Rustful常用于与第三方系统之间的信息通信,通过对外调用的接口。</p>
119+
<p>RPC常用于自家系统之间的互相调用,更安全高效。</p>
120+
]]></content>
121+
<categories>
122+
<category>RPC</category>
123+
</categories>
124+
<tags>
125+
<tag>RPC</tag>
126+
<tag>RUST</tag>
127+
<tag>Rustful</tag>
128+
</tags>
129+
</entry>
72130
<entry>
73131
<title>RPC系列(四)-HTTP网关</title>
74132
<url>/2021/07/17/RPC%E7%B3%BB%E5%88%97%EF%BC%88%E5%9B%9B%EF%BC%89-HTTP%E7%BD%91%E5%85%B3/</url>
@@ -191,68 +249,10 @@
191249
<category>gRPC</category>
192250
</categories>
193251
<tags>
252+
<tag>Golang</tag>
194253
<tag>gRPC</tag>
195254
<tag>RPC</tag>
196255
<tag>ProtoBuf</tag>
197-
<tag>Golang</tag>
198-
</tags>
199-
</entry>
200-
<entry>
201-
<title>Golang系列(一)-context使用</title>
202-
<url>/2021/07/12/Golang%E7%B3%BB%E5%88%97%EF%BC%88%E4%B8%80%EF%BC%89-context/</url>
203-
<content><![CDATA[<blockquote>
204-
<p>go的context包详解,context中文翻译过来叫“上下文”,本篇文章讲一下它具体的作用是什么。你在什么情况下可以用到它。</p>
205-
</blockquote>
206-
<a id="more"></a>
207-
208-
<h2 id="引言"><a href="#引言" class="headerlink" title="引言"></a>引言</h2><p>http server 常为每个请求创建一个 goroutine 以并发地处理请求,同时这个 goroutine 又会创建更多的 gotoutine 来访问数据库和缓存或RPC服务,当请求结束或被终止,能释放所有 gotoutine的资源。因此就需要一种机制,在goroutine之间传递信号消息。</p>
209-
<h2 id="简介"><a href="#简介" class="headerlink" title="简介"></a>简介</h2><p>context 中文翻译过来叫”上下文“,常被用来 goroutine 之间传递信息和信号的。信息和信号包括截至时间(deadline),取消信号(cancellation signals) 以及跨边界需要往下传递的键值对信息。</p>
210-
<h2 id="特性"><a href="#特性" class="headerlink" title="特性"></a>特性</h2><ul>
211-
<li>context的设计是可通过已有Context进行树型派生,已管理一组过程的生命周期。单Context是不可变的,但可以通过WithValue、WithCancel、WithTimeout方法进行派生并附加一些属性(键值、可取消、时限),以构建一组树型组织的context。</li>
212-
<li>当根 Context 结束时,所有由其派生出的 Context 也会被一并取消。也就是说,父 Context 的生命周期涵盖所有子 Context 的生命周期。</li>
213-
</ul>
214-
<h2 id="使用"><a href="#使用" class="headerlink" title="使用"></a>使用</h2><h3 id="创建根Context"><a href="#创建根Context" class="headerlink" title="创建根Context"></a>创建根Context</h3><p><code>context.Background() </code>创建一个空的Context(not nil), 常用作初始化创建根Context。</p>
215-
<h3 id="派生携带键值信息Context"><a href="#派生携带键值信息Context" class="headerlink" title="派生携带键值信息Context"></a>派生携带键值信息Context</h3><p><code>context.WithValue(parentContext, key, value)</code> 在父节点Context的基础上创建一个新的携带键值信息的的子节点Context。</p>
216-
<h3 id="派生可取消Context"><a href="#派生可取消Context" class="headerlink" title="派生可取消Context"></a>派生可取消Context</h3><p><code>context.WithCancel(parentContext) </code>在父节点Context的基础上创建一个新的可取消的子节点Context,返回新创建的子节点Context和取消方法cancelFunc。</p>
217-
<h3 id="派生有时间限制Context"><a href="#派生有时间限制Context" class="headerlink" title="派生有时间限制Context"></a>派生有时间限制Context</h3><p><code>context.WithTimeout(parentContext,timeout)</code>在父节点Context的基础上创建新的有时间限制的子节点Context,返回新创建子节点Context和取消方法cancelFunc。超过时间限制后,该Conext会发送信号到Done通道,所有子节点检测到信号立即退出。</p>
218-
<h3 id="派生有截至时间Context"><a href="#派生有截至时间Context" class="headerlink" title="派生有截至时间Context"></a>派生有截至时间Context</h3><p><code>context.WithDeadline(parentContext, time)</code>在父节点Context的基础上创建新的有截至时间的子节点Context,返回新创建子节点Context和取消方法cancelFunc。<code>context.Timeout(parentContext,timeout)</code>等价于<code>context.Deadline(parentContext,time.Now().Add(timeout))</code>。</p>
219-
<p>​ </p>
220-
<h2 id="注意"><a href="#注意" class="headerlink" title="注意"></a>注意</h2><ul>
221-
<li>Background 创建的根节点没有时限,也不能取消。</li>
222-
<li>WithCancel、WithTimeout、WithDeadline方法是从父context派生出新的context,新的context受限与父context的生命周期。新context应注意在对应过程结束后及时cancel,以防止goroutine泄露。</li>
223-
<li>不能使用nil Context,尽管语法上允许。不知道使用什么值合适时,可以使用 <code>context.TODO()</code>。</li>
224-
</ul>
225-
]]></content>
226-
<categories>
227-
<category>Golang</category>
228-
</categories>
229-
<tags>
230-
<tag>Golang</tag>
231-
<tag>context</tag>
232-
</tags>
233-
</entry>
234-
<entry>
235-
<title>RPC系列(一)-RPC与RUST比较</title>
236-
<url>/2021/07/06/RPC%E7%B3%BB%E5%88%97%EF%BC%88%E4%B8%80%EF%BC%89-RPC%E4%B8%8ERUST%E6%AF%94%E8%BE%83/</url>
237-
<content><![CDATA[<blockquote>
238-
<p>本篇文章主要介绍RPC是什么,RPC的具体过程,RPC和RUST的比较以及如何选择。</p>
239-
</blockquote>
240-
<a id="more"></a>
241-
242-
<h2 id="RPC是什么"><a href="#RPC是什么" class="headerlink" title="RPC是什么"></a>RPC是什么</h2><p>RPC(Remote Procedure Call)是远程过程调用的简称。主要目的就是一个应用调用另一个应用的方法,调用方通过调用代理方法的形式调用被调用方的实现方法。调用协议常包括通信协议和序列化协议。底层的通信协议可以是HTTP、TCP等,根据不同的RPC框架而定。序列化协议常用ProtoBuf协议。</p>
243-
<h2 id="RPC具体过程"><a href="#RPC具体过程" class="headerlink" title="RPC具体过程"></a>RPC具体过程</h2><p><img src="/images/rpc%E5%85%B7%E4%BD%93%E6%B5%81%E7%A8%8B.png" alt="rpc具体流程"></p>
244-
<h2 id="RPC和RUST比较"><a href="#RPC和RUST比较" class="headerlink" title="RPC和RUST比较"></a>RPC和RUST比较</h2><p>RUST是基于HTTP协议的RESTFul API设计风格的通信方式,也常用于应用之间的信息通信。但设计理念和底层原理是完全不同的。</p>
245-
<p>HTTP+Rustful的优点是可读性好,支持跨语言。在运用之间通信的使用超越RPC。但缺点也很明显,HTTP是第七层协议,报文包含大量头部信息,有用信息占比少,因此效率和速度较低。另外使用HTTP协议调用接口封装封装,常需要封装很多参数以及校验方法。RPC则更好与其互补,但牺牲可读性来通过效率和性能是可取的。具体怎么选,需根据业务来,灵活站位。</p>
246-
<h2 id="RPC使用场景"><a href="#RPC使用场景" class="headerlink" title="RPC使用场景"></a>RPC使用场景</h2><p>Rustful常用于与第三方系统之间的信息通信,通过对外调用的接口。</p>
247-
<p>RPC常用于自家系统之间的互相调用,更安全高效。</p>
248-
]]></content>
249-
<categories>
250-
<category>RPC</category>
251-
</categories>
252-
<tags>
253-
<tag>RPC</tag>
254-
<tag>RUST</tag>
255-
<tag>Rustful</tag>
256256
</tags>
257257
</entry>
258258
</search>

0 commit comments

Comments
 (0)