85 lines
24 KiB
HTML
85 lines
24 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="en-US">
|
||
<head>
|
||
<meta charset="utf-8">
|
||
<meta name="viewport" content="width=device-width,initial-scale=1">
|
||
<title>实现原理 | 中微子代理</title>
|
||
<meta name="generator" content="VuePress 1.9.2">
|
||
<link rel="icon" href="/img/favicon.ico">
|
||
<meta name="description" content="一个基于Netty的开源内网穿透神器">
|
||
<meta name="keywords" content="vuepress,theme,blog,vdoing">
|
||
<meta name="theme-color" content="#11a8cd">
|
||
<meta name="referrer" content="no-referrer-when-downgrade">
|
||
|
||
<link rel="preload" href="/assets/css/0.styles.9a38c92f.css" as="style"><link rel="preload" href="/assets/js/app.ca348287.js" as="script"><link rel="preload" href="/assets/js/2.3c66c1db.js" as="script"><link rel="preload" href="/assets/js/33.1bcf47cc.js" as="script"><link rel="prefetch" href="/assets/js/10.29f3b901.js"><link rel="prefetch" href="/assets/js/11.9204b194.js"><link rel="prefetch" href="/assets/js/12.453666ee.js"><link rel="prefetch" href="/assets/js/13.9bb9e169.js"><link rel="prefetch" href="/assets/js/14.0506a365.js"><link rel="prefetch" href="/assets/js/15.56e5f13e.js"><link rel="prefetch" href="/assets/js/16.96a280d7.js"><link rel="prefetch" href="/assets/js/17.d9c528d7.js"><link rel="prefetch" href="/assets/js/18.ee97e659.js"><link rel="prefetch" href="/assets/js/19.991c3af6.js"><link rel="prefetch" href="/assets/js/20.5f177780.js"><link rel="prefetch" href="/assets/js/21.3e087b2b.js"><link rel="prefetch" href="/assets/js/22.885a9953.js"><link rel="prefetch" href="/assets/js/23.8bbdfeac.js"><link rel="prefetch" href="/assets/js/24.c706df08.js"><link rel="prefetch" href="/assets/js/25.287b5c91.js"><link rel="prefetch" href="/assets/js/26.a9fabca1.js"><link rel="prefetch" href="/assets/js/27.69ccb5db.js"><link rel="prefetch" href="/assets/js/28.a53b1177.js"><link rel="prefetch" href="/assets/js/29.794afe60.js"><link rel="prefetch" href="/assets/js/3.1da34606.js"><link rel="prefetch" href="/assets/js/30.f986c6e3.js"><link rel="prefetch" href="/assets/js/31.6e8f5b21.js"><link rel="prefetch" href="/assets/js/32.21a79b2c.js"><link rel="prefetch" href="/assets/js/34.a2f43843.js"><link rel="prefetch" href="/assets/js/35.1adcfbe2.js"><link rel="prefetch" href="/assets/js/36.0032bfb7.js"><link rel="prefetch" href="/assets/js/37.beda5e0a.js"><link rel="prefetch" href="/assets/js/38.c2e5b26c.js"><link rel="prefetch" href="/assets/js/39.33e2b29d.js"><link rel="prefetch" href="/assets/js/4.634cb970.js"><link rel="prefetch" href="/assets/js/40.d52a3c80.js"><link rel="prefetch" href="/assets/js/41.488edd88.js"><link rel="prefetch" href="/assets/js/5.2af91adb.js"><link rel="prefetch" href="/assets/js/6.6272e509.js"><link rel="prefetch" href="/assets/js/7.125b3b3a.js"><link rel="prefetch" href="/assets/js/8.491a30ee.js"><link rel="prefetch" href="/assets/js/9.0e5435be.js">
|
||
<link rel="stylesheet" href="/assets/css/0.styles.9a38c92f.css">
|
||
</head>
|
||
<body class="theme-mode-light">
|
||
<div id="app" data-server-rendered="true"><div class="theme-container sidebar-open have-rightmenu"><header class="navbar blur"><div title="目录" class="sidebar-button"><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" role="img" viewBox="0 0 448 512" class="icon"><path fill="currentColor" d="M436 124H12c-6.627 0-12-5.373-12-12V80c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12zm0 160H12c-6.627 0-12-5.373-12-12v-32c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12zm0 160H12c-6.627 0-12-5.373-12-12v-32c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12z"></path></svg></div> <a href="/" class="home-link router-link-active"><img src="/img/logo.png" alt="中微子代理" class="logo"> <span class="site-name can-hide">中微子代理</span></a> <div class="links"><div class="search-box"><input aria-label="Search" autocomplete="off" spellcheck="false" value=""> <!----></div> <nav class="nav-links can-hide"><div class="nav-item"><a href="/" class="nav-link">首页</a></div><div class="nav-item"><div class="dropdown-wrapper"><button type="button" aria-label="文档" class="dropdown-title"><a href="/pages/793dcb/" class="link-title">文档</a> <span class="title" style="display:none;">文档</span> <span class="arrow right"></span></button> <ul class="nav-dropdown" style="display:none;"><li class="dropdown-item"><!----> <a href="/pages/793dcb/" class="nav-link">快速上手</a></li><li class="dropdown-item"><!----> <a href="/pages/793dcc/" class="nav-link">后台操作指南</a></li></ul></div></div><div class="nav-item"><a href="/pages/5d571c/" class="nav-link">案例</a></div><div class="nav-item"><a href="/pages/1ab20b/" class="nav-link">支持</a></div><div class="nav-item"><a href="/pages/ff3519/" class="nav-link">更新记录</a></div><div class="nav-item"><a href="https://gitcode.com/dromara/neutrino-proxy" target="_blank" rel="noopener noreferrer" class="nav-link external">
|
||
GitCode
|
||
<span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a></div><div class="nav-item"><a href="https://gitee.com/dromara/neutrino-proxy" target="_blank" rel="noopener noreferrer" class="nav-link external">
|
||
Gitee
|
||
<span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a></div> <a href="https://github.com/dromara/neutrino-proxy" target="_blank" rel="noopener noreferrer" class="repo-link">
|
||
Github
|
||
<span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a></nav></div></header> <div class="sidebar-mask"></div> <div class="sidebar-hover-trigger"></div> <aside class="sidebar" style="display:none;"><!----> <nav class="nav-links"><div class="nav-item"><a href="/" class="nav-link">首页</a></div><div class="nav-item"><div class="dropdown-wrapper"><button type="button" aria-label="文档" class="dropdown-title"><a href="/pages/793dcb/" class="link-title">文档</a> <span class="title" style="display:none;">文档</span> <span class="arrow right"></span></button> <ul class="nav-dropdown" style="display:none;"><li class="dropdown-item"><!----> <a href="/pages/793dcb/" class="nav-link">快速上手</a></li><li class="dropdown-item"><!----> <a href="/pages/793dcc/" class="nav-link">后台操作指南</a></li></ul></div></div><div class="nav-item"><a href="/pages/5d571c/" class="nav-link">案例</a></div><div class="nav-item"><a href="/pages/1ab20b/" class="nav-link">支持</a></div><div class="nav-item"><a href="/pages/ff3519/" class="nav-link">更新记录</a></div><div class="nav-item"><a href="https://gitcode.com/dromara/neutrino-proxy" target="_blank" rel="noopener noreferrer" class="nav-link external">
|
||
GitCode
|
||
<span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a></div><div class="nav-item"><a href="https://gitee.com/dromara/neutrino-proxy" target="_blank" rel="noopener noreferrer" class="nav-link external">
|
||
Gitee
|
||
<span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a></div> <a href="https://github.com/dromara/neutrino-proxy" target="_blank" rel="noopener noreferrer" class="repo-link">
|
||
Github
|
||
<span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a></nav> <ul class="sidebar-links"><li><a href="/pages/1ab20b/" class="sidebar-link">个人赞赏</a></li><li><section class="sidebar-group depth-0"><p class="sidebar-heading open"><span>贡献指南</span> <!----></p> <ul class="sidebar-links sidebar-group-items"><li><a href="/pages/a3f096/" class="sidebar-link">如何贡献</a></li><li><a href="/pages/2f674a/" class="sidebar-link">项目结构</a></li><li><a href="/pages/dd027d/" aria-current="page" class="active sidebar-link">实现原理</a><ul class="sidebar-sub-headers"><li class="sidebar-sub-header level2"><a href="/pages/dd027d/#指令通道-cmdchannel" class="sidebar-link">指令通道(CmdChannel)</a></li><li class="sidebar-sub-header level2"><a href="/pages/dd027d/#用户访问通道-visitorchannel" class="sidebar-link">用户访问通道(VisitorChannel)</a></li><li class="sidebar-sub-header level2"><a href="/pages/dd027d/#被代理服务的实际通道-realserverchannel" class="sidebar-link">被代理服务的实际通道(RealServerChannel)</a></li><li class="sidebar-sub-header level2"><a href="/pages/dd027d/#代理数据传输的通道-proxychannel" class="sidebar-link">代理数据传输的通道(ProxyChannel)</a></li><li class="sidebar-sub-header level2"><a href="/pages/dd027d/#_1、服务连接阶段" class="sidebar-link">1、服务连接阶段</a></li><li class="sidebar-sub-header level2"><a href="/pages/dd027d/#_2、用户连接阶段" class="sidebar-link">2、用户连接阶段</a></li><li class="sidebar-sub-header level2"><a href="/pages/dd027d/#_3、实际被代理服务连接阶段" class="sidebar-link">3、实际被代理服务连接阶段</a></li><li class="sidebar-sub-header level2"><a href="/pages/dd027d/#_4、代理通道连接阶段" class="sidebar-link">4、代理通道连接阶段</a></li><li class="sidebar-sub-header level2"><a href="/pages/dd027d/#_5、数据传输阶段" class="sidebar-link">5、数据传输阶段</a></li></ul></li></ul></section></li><li><section class="sidebar-group depth-0"><p class="sidebar-heading"><span>赞赏公示</span> <!----></p> <ul class="sidebar-links sidebar-group-items"><li><a href="/pages/acdf0a/" class="sidebar-link">2024年</a></li><li><a href="/pages/cded59/" class="sidebar-link">2023年</a></li></ul></section></li></ul> </aside> <div><main class="page"><div class="theme-vdoing-wrapper "><div class="placeholder"></div> <!----> <div class="content-wrapper"><div class="right-menu-wrapper"><div class="right-menu-margin"><div class="right-menu-title">目录</div> <div class="right-menu-content"></div></div></div> <h1><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAYAAAA7MK6iAAAAAXNSR0IArs4c6QAABKFJREFUSA3tVl1oFVcQnrMbrak3QUgkya1akpJYcrUtIqW1JvFBE9LiQ5v6JmJpolbMg32rVrhgoYK0QiMY6i9Y6EMaW5D+xFJaTYItIuK2Kr3+BJNwkxBj05sQY3b3nM6cs2dv9t7NT/vQJw/sndk5M/PNzJkzewGerP+pAmy+ON8lLzUJgA8ZYxYIYZmGYRnctDaWvJJAmTtfP1pvXsBCCPP8QFcCaRkZYACgDZFO4stNIcBCajEOlmmC9XpJ9bAGCaPaPmzPl32dvLSVu3BWCTQs0XQQ6g0DYgwLIoAZbBCdW/i+781o1VVlm/410mw4h06Y7bIPHNyWDyL4FHkX03Q8SrzNhZTZriieckWt7cL6MM85YcLpsi/7O9/iXFT6MswI0DmmpkSaJ0qLxFIm3+i1THHB3zmBH3PYx9CcykcLOeQVVa7QtdxTgQgEleX2AjHYfwA+2ddV77ruGoJUbhGDI09YSNXyMpUt5ylOzxgbUmtOp7NmbNt8v3arjTBfYELmLUV+M+nSawNNAUqpT3ClJWg5I3BLT+cGW/DXNGCa6tx1aakCGEigArTn4TDIPdrXXYKCZNrHLMCOEPvHBlLQ99s9eHB7EB6NTki73CVPQ2F5MSx/uRQixfmq7rK0wYD8w8E905bnPDfwoWs/rfv93NWN/ZfvwsLIU7A09gxECyISeGJkHAau98L97tuw7NXnoPyNF8FcYGLGKsOs0mN3OEyec9esGW/ZEl945dTP34wlR2FZVQWU1q0Cw8Tr7p+hgLLNL0FPxx/Q35mA8aEUrH6nCgwEl0tn7wUiZYJnNRh6DK4UH/k0lfyrsBKdPVv/AriGIQcEDQZ65LBAGe2Rzui9Ybjz7XUppz1/uKBbyVPGkN3ZAeC6hr0x7Nr38N5+EqkoOm17xpoqR9ohQF55ERSvr4Dkr3chNfC3DMzGJlNBElW8w9nsGQvhNGIzDkXzCg8cLK951xHsFBlTJspJNi3ZFIMF2AeDV3q8DNOB+YHi6QTrChDIWDBRi5U5f+ZMfJLu3ccrqxtdxk4SKH336LFxSmkqefwU5T8fhdSdQf9IVKD6aNiwI/hnmcAZ91isYMJIaCUCx9W098+LgruikeTqzqqxKPUwqJyCPJiyemVVZBOijDGjD38Os0jOiSPL1z3SPjXNANbiNPXAdzTfukjjuknNBbyz3nwgTd3AVFqUJ5hpHlq9MveLnWwttUfoygBmvVjuikxND3znrhsELnZk7k+OjIGxeNEkomyLVta0xxn+HZhjBc4YZ/AFjHjz9u3xRZl2BN4aq9nFwWh16IrQ1aHHEd3j1+4/dB9OtH4e29A2H1DyHQRmOSfQZ1Fy7MHBTGB6J/Djq6p3OxyO2cB+4Car7v/o3GXgfAkj23+x9ID1Teoamo/SXcbvSf2PX7Vc8DdCmE1vN9di+32P9/5YR3vLnhCVGUWBjEkr3yh4H8v9CzmsbdhzOKzsJKM90iFdaTMjRPhGVsakRvOaRidljo6H6G7j+ctrJpsP+4COhDIl0La2+FS4+5mlocBaXY5QnGZysIBYoeSsl5qQzrSj/cgNrfuEzlWBfwA+EjrZyWUvpAAAAABJRU5ErkJggg==">实现原理<!----></h1> <div class="page-slot page-slot-top">
|
||
<div class="wwads-cn wwads-horizontal page-wwads" data-id="136"></div>
|
||
<style>
|
||
.page-wwads{
|
||
width:100%!important;
|
||
min-height: 0;
|
||
margin: 0;
|
||
}
|
||
.page-wwads .wwads-img img{
|
||
width:80px!important;
|
||
}
|
||
.page-wwads .wwads-poweredby{
|
||
width: 40px;
|
||
position: absolute;
|
||
right: 25px;
|
||
bottom: 3px;
|
||
}
|
||
.wwads-content .wwads-text, .page-wwads .wwads-text{
|
||
height: 100%;
|
||
padding-top: 5px;
|
||
display: block;
|
||
}
|
||
</style>
|
||
</div> <div class="theme-vdoing-content content__default"><h1 id="代理实现中涉及的几类channel"><a href="#代理实现中涉及的几类channel" class="header-anchor">#</a> 代理实现中涉及的几类Channel</h1> <h2 id="指令通道-cmdchannel"><a href="#指令通道-cmdchannel" class="header-anchor">#</a> 指令通道(CmdChannel)</h2> <ul><li>该channel负责维护客户端与服务端之间的指令通讯,由客户端启动后向服务端发起连接请求,服务端验证license成功后连接建立。</li> <li>服务端维护第一个CmdChannel的映射表,key为licenseId。服务端可以根据licenseId,向指定的客户端指令通道发布指令。</li> <li>该通道建立完成后,服务端会将该license授权的外网映射端口打开,等待用户访问。正常情况下,只要客户端不下线,该通道一直可用。</li> <li>然后服务端维护第二个CmdChannel的映射表,key为服务端外网端口。服务端可以根据指定的外网端口,向指定的客户端指令通道发布指令。</li></ul> <h2 id="用户访问通道-visitorchannel"><a href="#用户访问通道-visitorchannel" class="header-anchor">#</a> 用户访问通道(VisitorChannel)</h2> <ul><li>该channel负责维护访问者与服务端端口之间的通讯,由访问者向服务端映射的外网端口发起请求开始建立,具体断开时机由实际的被代理的
|
||
协议决定。</li> <li>如HTTP/1.0下,用户向该端口发起请求,响应结束后,该通道随之关闭,下一次发起请求后,重新建立新的连接。</li> <li>该连接建立后,服务端会向该外网端口映射的指令通道发送<code>Connect</code>指令,传输该外网端口需要代理的内网信息,
|
||
如:<code>127.0.0.1:3306</code>。</li></ul> <h2 id="被代理服务的实际通道-realserverchannel"><a href="#被代理服务的实际通道-realserverchannel" class="header-anchor">#</a> 被代理服务的实际通道(RealServerChannel)</h2> <ul><li>该channel负责维护客户端与实际被代理服务之间的通讯,当客户端接收到服务端的<code>Connect</code>指令后,客户端便会建立该通道。</li></ul> <h2 id="代理数据传输的通道-proxychannel"><a href="#代理数据传输的通道-proxychannel" class="header-anchor">#</a> 代理数据传输的通道(ProxyChannel)</h2> <ul><li>该channel负责完成内网被代理服务与代理服务端之间的数据转发任务。</li> <li>每个客户端维护一个<code>ProxyChannel</code>的缓存队列,需要时从该队列中取,当取不到时,直接新建一个<code>ProxyChannel</code>返回。
|
||
当一个<code>ProxyChannel</code>实例用完后,需要归还到缓存队列中(<code>ProxyChannel</code>收到<code>DisConnect</code>指令时)。</li> <li>当<code>RealServerChannel</code>建立完成后,就会获取相关联的<code>ProxyChannel</code>,并与其绑定。设置<code>RealServerChannel</code>为
|
||
可读状态。然后通过<code>ProxyChannel</code>向服务端发送<code>Connect</code>指令。</li></ul> <h1 id="代理实现流程"><a href="#代理实现流程" class="header-anchor">#</a> 代理实现流程</h1> <h2 id="_1、服务连接阶段"><a href="#_1、服务连接阶段" class="header-anchor">#</a> 1、服务连接阶段</h2> <ul><li>1.1、客户端根据是否需要使用SSL,选择对应的服务端端口发起连接,建立<code>CmdChannel</code>。</li> <li>1.2、客户端根据用户输入或配置文件获取<code>license</code>,并携带<code>license</code>通过<code>CmdChannel</code>向服务端发送<code>Auth</code>指令。</li> <li>1.3、服务端通过<code>CmdChannel</code>接收到来自客户端的<code>Auth</code>指令。若验证<code>license</code>有效,则建立<code>licenseId</code>与<code>CmdChannel</code>的映射缓存、
|
||
外网端口与<code>CmdChannel</code>的映射缓存。并启动服务端代理端口,等待用户连接。</li></ul> <h2 id="_2、用户连接阶段"><a href="#_2、用户连接阶段" class="header-anchor">#</a> 2、用户连接阶段</h2> <ul><li>2.1、用户向服务端代理的外网端口发起请求,服务端建立<code>VisitorChannel</code>。</li> <li>2.2、根据外网端口查找<code>CmdChannel</code>,若不存在有效的<code>CmdChannel</code>,则关闭该<code>VisitorChannel</code>。否则,
|
||
设置<code>VisitorChannel</code>为不可读,并携带内网映射信息(如:<code>127.0.0.1:3306</code>)通过<code>CmdChannel</code>向客户端发送<code>Connect</code>指令。</li></ul> <h2 id="_3、实际被代理服务连接阶段"><a href="#_3、实际被代理服务连接阶段" class="header-anchor">#</a> 3、实际被代理服务连接阶段</h2> <ul><li>3.1、客户端通过<code>CmdChannel</code>接收到服务端的<code>Connect</code>指令。拿到需要代理的内网IP、端口号,向实际被
|
||
代理服务发起连接请求,若连接失败,则通过<code>CmdChannel</code>向服务端发送<code>DisConnect</code>指令。建立<code>RealServerChannel</code>成功,设置<code>RealServerChannel</code>为不可读
|
||
状态,并进入4.1阶段</li></ul> <h2 id="_4、代理通道连接阶段"><a href="#_4、代理通道连接阶段" class="header-anchor">#</a> 4、代理通道连接阶段</h2> <ul><li>4.1、客户端通过<code>ProxyChannelQueue</code>获取或新建一个<code>ProxyChannel</code>,并将<code>RealServerChannel</code>与<code>ProxyChannel</code>进行绑定。</li> <li>4.2、客户端通过<code>ProxyChannel</code>向服务端发送<code>Connect</code>指令。</li> <li>4.3、服务端通过<code>ProxyChannel</code>通道收到来自客户端的<code>Connect</code>指令后,将<code>ProxyChannel</code>与对应的<code>VisitorChannel</code>进行绑定,并
|
||
设置<code>VisitorChannel</code>为可读状态。</li></ul> <h2 id="_5、数据传输阶段"><a href="#_5、数据传输阶段" class="header-anchor">#</a> 5、数据传输阶段</h2> <ul><li>5.1、服务端通过<code>VisitorChannel</code>收到来自用户的请求数据,然后找到<code>VisitorChannel</code>绑定的<code>ProxyChannel</code>,
|
||
通过<code>ProxyChannel</code>发送<code>Transfer</code>指令,并携带用户请求数据。</li> <li>5.2、客户端通过<code>ProxyChannel</code>收到来自服务端的<code>Transfer</code>指令,取出用户请求数据。找到<code>ProxyChannel</code>绑定的<code>RealServerChannel</code>,
|
||
通过<code>RealServerChannel</code>向被代理服务写入用户请求数据。</li> <li>5.3、客户端通过<code>RealServerChannel</code>收到被代理服务响应的数据,找到<code>RealServerChannel</code>绑定的<code>ProxyChannel</code>,
|
||
通过<code>ProxyChannel</code>向服务端发送<code>Transfer</code>指令,并携带响应数据。</li> <li>5.4、服务端通过<code>ProxyChannel</code>收到来自客户端的<code>Transfer</code>指令,找到<code>ProxyChannel</code>绑定的<code>VisitorChannel</code>,
|
||
通过<code>VisitorChannel</code>向用户端写入响应数据。</li></ul></div></div> <div class="page-edit"><!----> <!----> <div class="last-updated"><span class="prefix">上次更新:</span> <span class="time">2023/10/26, 13:41:02</span></div></div> <div class="page-nav-wapper"><div class="page-nav-centre-wrap"><a href="/pages/2f674a/" class="page-nav-centre page-nav-centre-prev"><div class="tooltip">项目结构</div></a> <a href="/pages/acdf0a/" class="page-nav-centre page-nav-centre-next"><div class="tooltip">2024年</div></a></div> <div class="page-nav"><p class="inner"><span class="prev">
|
||
←
|
||
<a href="/pages/2f674a/" class="prev">项目结构</a></span> <span class="next"><a href="/pages/acdf0a/">2024年</a>→
|
||
</span></p></div></div></div> <!----></main></div> <div class="footer"><div class="icons"><a href="mailto:[email protected]" title="发邮件" target="_blank" class="iconfont icon-youjian"></a><a href="https://gitee.com/dromara/neutrino-proxy" title="Gitee" target="_blank" class="iconfont icon-gitee"></a><a href="https://github.com/aoshiguchen/neutrino-proxy" title="Github" target="_blank" class="iconfont icon-github"></a></div>
|
||
Theme by
|
||
<a href="https://github.com/xugaoyi/vuepress-theme-vdoing" target="_blank" title="本站主题">Vdoing</a>
|
||
| Copyright © 2023-2026
|
||
<span>傲世孤尘 | MIT License</span></div> <div class="buttons"><div title="返回顶部" class="button blur go-to-top iconfont icon-fanhuidingbu" style="display:none;"></div> <div title="去评论" class="button blur go-to-comment iconfont icon-pinglun" style="display:none;"></div> <div title="主题模式" class="button blur theme-mode-but iconfont icon-zhuti"><ul class="select-box" style="display:none;"><li class="iconfont icon-zidong">
|
||
跟随系统
|
||
</li><li class="iconfont icon-rijianmoshi">
|
||
浅色模式
|
||
</li><li class="iconfont icon-yejianmoshi">
|
||
深色模式
|
||
</li><li class="iconfont icon-yuedu">
|
||
阅读模式
|
||
</li></ul></div></div> <!----> <!----> <!----></div><div class="global-ui"></div></div>
|
||
<script src="/assets/js/app.ca348287.js" defer></script><script src="/assets/js/2.3c66c1db.js" defer></script><script src="/assets/js/33.1bcf47cc.js" defer></script>
|
||
</body>
|
||
</html>
|