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/>