<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title>Streaming - 标签 - 种树的时间</title><link>https://zhongshutime.com/tags/streaming/</link><description>Streaming - 标签 - 种树的时间</description><generator>Hugo -- gohugo.io</generator><language>zh-CN</language><managingEditor>plantatree2023@gmail.com (种树者)</managingEditor><webMaster>plantatree2023@gmail.com (种树者)</webMaster><copyright>This work is licensed under a Creative Commons Attribution-NonCommercial 4.0 International License.</copyright><lastBuildDate>Thu, 09 Apr 2026 21:57:40 +0800</lastBuildDate><atom:link href="https://zhongshutime.com/tags/streaming/" rel="self" type="application/rss+xml"/><item><title>Envoy里流式协议的数据流</title><link>https://zhongshutime.com/envoy-streaming/</link><pubDate>Thu, 09 Apr 2026 21:57:40 +0800</pubDate><author>plantatree2023@gmail.com (种树者)</author><guid>https://zhongshutime.com/envoy-streaming/</guid><description><![CDATA[<h3 id="定义后端服务">定义后端服务</h3>
<p>先用protobuf定义你的服务。该服务有一个双向流API BiStream。</p>
<div class="code-block code-line-numbers open" style="counter-reset: code-block 0">
    <div class="code-header language-proto">
        <span class="code-title"><i class="arrow fas fa-angle-right" aria-hidden="true"></i></span>
        <span class="ellipses"><i class="fas fa-ellipsis-h" aria-hidden="true"></i></span>
        <span class="copy" title="复制到剪贴板"><i class="far fa-copy" aria-hidden="true"></i></span>
    </div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-proto" data-lang="proto"><span class="line"><span class="cl"><span class="n">syntax</span> <span class="o">=</span> <span class="s">&#34;proto3&#34;</span><span class="p">;</span><span class="err">
</span></span></span><span class="line"><span class="cl"><span class="kn">package</span> <span class="nn">api</span><span class="p">;</span><span class="err">
</span></span></span><span class="line"><span class="cl"><span class="k">option</span> <span class="n">go_package</span> <span class="o">=</span> <span class="s">&#34;envoystreaming/api&#34;</span><span class="p">;</span><span class="err">
</span></span></span><span class="line"><span class="cl"><span class="err">
</span></span></span><span class="line"><span class="cl"><span class="kd">service</span> <span class="n">StreamService</span> <span class="p">{</span><span class="err">
</span></span></span><span class="line"><span class="cl">  <span class="k">rpc</span> <span class="n">BiStream</span><span class="p">(</span><span class="n">stream</span> <span class="n">Data</span><span class="p">)</span> <span class="k">returns</span> <span class="p">(</span><span class="n">stream</span> <span class="n">Data</span><span class="p">);</span><span class="err">
</span></span></span><span class="line"><span class="cl"><span class="p">}</span><span class="err">
</span></span></span><span class="line"><span class="cl"><span class="err">
</span></span></span><span class="line"><span class="cl"><span class="kd">message</span> <span class="nc">Data</span> <span class="p">{</span> <span class="kt">string</span> <span class="n">body</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span> <span class="p">}</span></span></span></code></pre></div></div>
<div class="details admonition tip open">
    <div class="details-summary admonition-title">
        <i class="icon far fa-lightbulb" aria-hidden="true"></i>提示<i class="details-icon fas fa-angle-right" aria-hidden="true"></i>
    </div>
    <div class="details-content">
        <div class="admonition-content">为了使Go服务能识别到你定义的服务。你需要先运行下面的代码生成服务定义。执行之后，你会看到他生成了名为stream_grpc.pb.go的Go语言服务定义。</div>
    </div>
</div>
<div class="code-block code-line-numbers open" style="counter-reset: code-block 0">
    <div class="code-header language-bash">
        <span class="code-title"><i class="arrow fas fa-angle-right" aria-hidden="true"></i></span>
        <span class="ellipses"><i class="fas fa-ellipsis-h" aria-hidden="true"></i></span>
        <span class="copy" title="复制到剪贴板"><i class="far fa-copy" aria-hidden="true"></i></span>
    </div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">protoc --go_out<span class="o">=</span>. --go_opt<span class="o">=</span><span class="nv">paths</span><span class="o">=</span>source_relative <span class="se">\
</span></span></span><span class="line"><span class="cl">    --go-grpc_out<span class="o">=</span>. --go-grpc_opt<span class="o">=</span><span class="nv">paths</span><span class="o">=</span>source_relative <span class="se">\
</span></span></span><span class="line"><span class="cl">    api/stream.proto</span></span></code></pre></div></div>
<p>然后我门用Go语言实现该服务。该服务按顺序从输入流中轮询发送过来的数据。当他发现有数据发送过来的时候，间隔5秒发送一个ACK响应，一共发三个。</p>]]></description></item></channel></rss>