<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
    <channel>
        <title>Golang - 标签 - 开发者技术小屋</title>
        <link>https://www.developerhome.net/tags/golang/</link>
        <description>Golang - 标签 - 开发者技术小屋</description>
        <generator>Hugo -- gohugo.io</generator><language>zh-cn</language><lastBuildDate>Fri, 11 Dec 2020 15:56:36 &#43;0000</lastBuildDate><atom:link href="https://www.developerhome.net/tags/golang/" rel="self" type="application/rss+xml" /><item>
    <title>推荐一个golang的tcp处理包</title>
    <link>https://www.developerhome.net/archives/560/</link>
    <pubDate>Fri, 11 Dec 2020 15:56:36 &#43;0000</pubDate>
    <author>Jarod</author>
    <guid>https://www.developerhome.net/archives/560/</guid>
    <description><![CDATA[<div class="featured-image">
                <img src="/uploads/2026/06/cover-560.jpg" referrerpolicy="no-referrer">
            </div><p>在做物联网设备对接中，我们常常要用到<code>TCP</code>长连接来交互数据，而<code>Golang</code>的设计理念，天生适合做<code>TCP</code>连接的处理。</p>
<p>今天推荐一个开源包 <a href="https://github.com/shootingfans/socket" target="_blank" rel="noopener noreffer ">github.com/shootingfans/socket</a> 来更方便的处理<code>TCP</code>连接操作。</p>
<p>这个包中，首先将处理连接分为两种</p>
<ul>
<li><code>AsyncProcessor</code> 异步处理器</li>
<li>
<ul>
<li><code>SyncProcessor</code> 同步处理器</li>
</ul>
</li>
<li></li>
</ul>
<p>其中异步处理器会在处理连接时，分为读协程、写协程以及工作协程，同时工作协程是可以配置多个的，数据流转为</p>
<div class="code-block code-line-numbers open" style="counter-reset: code-block 0">
    <div class="code-header language-">
        <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><pre tabindex="0"><code>连接 -&gt; 读取协程 --Worker通道--&gt; 多个Worker处理 --&gt; 调度器 --写通道--&gt; 写协程--&gt; 连接</code></pre></div>
<p>调度器则作为一个协调器使用，调取内存取了连接、写入通道等，其结构定义如下</p>
<div class="code-block code-line-numbers open" style="counter-reset: code-block 0">
    <div class="code-header language-go">
        <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-go" data-lang="go"><span class="line"><span class="cl"><span class="c1">// Scheduler</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="c1">// 调度器</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="kd">type</span><span class="w"> </span><span class="nx">Scheduler</span><span class="w"> </span><span class="kd">struct</span><span class="w"> </span><span class="p">{</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="c1">// 连接</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nx">Conn</span><span class="w">            </span><span class="o">*</span><span class="nx">Connection</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="c1">// 上下文</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nx">Ctx</span><span class="w">             </span><span class="nx">context</span><span class="p">.</span><span class="nx">Context</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="c1">// 写入通道</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nx">WriteChan</span><span class="w">       </span><span class="kd">chan</span><span class="o">&lt;-</span><span class="w"> </span><span class="p">[]</span><span class="kt">byte</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nx">rw</span><span class="w">              </span><span class="nx">sync</span><span class="p">.</span><span class="nx">RWMutex</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nx">values</span><span class="w">          </span><span class="kd">map</span><span class="p">[</span><span class="kd">interface</span><span class="p">{}]</span><span class="kd">interface</span><span class="p">{}</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="p">}</span></span></span></code></pre></div></div>
<p>同时调度器还提供了存、读、删，以及自增、自减几个功能用于在多个<code>Worker</code>内共享数据</p>]]></description>
</item>
</channel>
</rss>
