This commit is contained in:
wentch
2016-01-21 10:55:10 +08:00
parent ed4f6bc9ab
commit 5a61b5122f
4 changed files with 32 additions and 5 deletions

View File

@@ -640,6 +640,25 @@
<span class="o">}</span></pre></div>
<h3><a id="net_sncp" class="anchor" href="#" aria-hidden="true"><span class="octicon octicon-link"></span></a>SNCP 协议</h3>
<p>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SNCP(Service Node Communicate Protocol)协议是RedKale独有的一种传输协议用于进程之间的通信即请求方的<a href="service.html#service_remote" target="_blank">远程模式Service</a>与响应方的Service之间的通信。可以看成是RMI(远程接口调用)的同款主要区别在于RedKale里SNCP几乎是透明的写一个普通的Service通过配置即可实现远程调用而不需要专门针对远程写接口。SNCP服务的配置与HTTP差不多只是SNCP不需要ServletSncpServlet是通过Service动态生成的。<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SNCP的数据包分包头和包体。包头描述请求的Service信息请求包的包体描述参数的BSON响应包的包体描述回调的参数对象和结果对象的BSON。<br/>
&nbsp;&nbsp;&nbsp;&nbsp;包头固定长度为72字节其结构如下:
</p>
<table style="margin: auto;">
<tr><th>字段</th><th>占用字节数</th><th>描述</th></tr>
<tr><td>序列号</td><td style="text-align: center;">8</td><td>请求的唯一序列号</td></tr>
<tr><td>包头长度</td><td style="text-align: center;">2</td><td>值固定为72</td></tr>
<tr><td>Service类名hash值</td><td style="text-align: center;">16</td><td>Service类名class.getName()的MD5值</td></tr>
<tr><td>Service资源hash值</td><td style="text-align: center;">16</td><td>Service资源名@Resource.name()的MD5值</td></tr>
<tr><td>Service方法hash值</td><td style="text-align: center;">16</td><td>Service方法method.toString()的MD5值</td></tr>
<tr><td>发送方地址</td><td style="text-align: center;">6</td><td>前4字节为地址后2字节为端口号</td></tr>
<tr><td>包体长度</td><td style="text-align: center;">4</td><td>整个包体的长度</td></tr>
<tr><td>结果码</td><td style="text-align: center;">4</td><td>请求方的值固定为0响应方的值视为错误码为0表示成功非0为失败。</td></tr>
</table>
<p>
&nbsp;&nbsp;&nbsp;&nbsp;包体数据结构为 ([参数序号][参数BSON值])* N + [0][结果对象BSON]。 其中参数序号从1开始只有当Service的方法存在<a href="service.html#service_dyncall" target="_blank">@DynCall回调</a>才会有参数BSON序号为0表示为结果对象的BSON值。若方法为<font color="blue">void</font>返回类型则不存在结果对象BSON值。
</p>
<h3><a id="net_diy" class="anchor" href="#" aria-hidden="true"><span class="octicon octicon-link"></span></a>自定义协议</h3>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;协议的网络框架包含五种对象: <br/>

View File

@@ -233,7 +233,10 @@
<span class="o">}</span>
<span class="o">}</span>
</pre></div>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;由以上代码可以看出来远程模式Service是根据本地模式Service临时类动态生成的。远程类执行方法时通过SNCP协议将参数序列化并带上当前方法信息传输到远程服务器上执行完后将结果流反序列化并返回, 其流程与WebService类似。与WebService最大的区别在于远程模式的Service允许修改参数本身的内容。范例如下</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;由以上代码可以看出来远程模式Service是根据本地模式Service临时类动态生成的。远程类执行方法时通过SNCP协议将参数序列化并带上当前方法信息传输到远程服务器上执行完后将结果流反序列化并返回, 其流程与WebService类似。</p>
<p id="service_dyncall">&nbsp;&nbsp;<b>远程模式的@DynCall回调</b> </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;与WebService的区别除了更具性能的二进制的数据格式更差异的是远程模式的Service允许修改参数本身的内容。范例如下</p>
<div class="highlight"><pre><span class="cm">/**</span>
<span class="cm"> * 由于该方法在处理过程中修改了参数bean的内容为了保证本地模式与远程模式的一致性需要提供@DynCall回调接口</span>
<span class="cm"> *</span>

View File

@@ -26,7 +26,7 @@
<section class="main-content">
<h3><a id="source_intro" class="anchor" href="#" aria-hidden="true"><span class="octicon octicon-link"></span></a>Source 组件介绍</h3>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Source 提供两种类型的数据源DataSource 和 CacheSource。DataSource 为数据库或内存数据库提供类似JPA、Hibernate的接口与功能。CacheSource 为缓存数据 提供类似Memcached、Redis的接口和功能。两者也提供了异步接口(基于<a href="service.html#service_remote" target="_blank">远程模式Service</a>)。<br/></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Source 提供两种类型的数据源DataSource 和 CacheSource。DataSource 为数据库或内存数据库提供类似JPA、Hibernate的接口与功能。CacheSource 为缓存数据 提供类似Memcached、Redis的接口和功能。两者也提供了异步接口(基于<a href="service.html#service_remote" target="_blank">远程模式Service</a>)。<br/></p>
<h3><a id="datasource_study" class="anchor" href="#" aria-hidden="true"><span class="octicon octicon-link"></span></a>DataSource 入门</h3>
<p>

View File

@@ -44,6 +44,7 @@ a:hover {
border-color: rgba(255, 255, 255, 0.3);
}
@media screen and (min-width: 80em) {
.btn {
padding: 0.75rem 1rem;
@@ -301,7 +302,7 @@ a:hover {
width: 100%;
overflow: auto;
word-break: normal;
word-break: keep-all;
word-break: keep-all;
}
.main-content table th {
@@ -309,8 +310,8 @@ a:hover {
}
.main-content table th, .main-content table td {
padding: 0.5rem 1rem;
border: 1px solid #e9ebec;
padding: 0.4rem 1.2rem 0.4rem 1.2rem;
border: 1px solid #90139E;
}
.main-content dl {
@@ -344,6 +345,10 @@ a:hover {
margin: 0 auto;
font-size: 1.1rem;
}
.main-content table {
width: 60em;
min-width: 60em;
}
}
@media screen and (min-width: 79em) and (max-width: 96em) {