This commit is contained in:
19
net.html
19
net.html
@@ -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>
|
||||
SNCP(Service Node Communicate Protocol)协议是RedKale独有的一种传输协议,用于进程之间的通信,即请求方的<a href="service.html#service_remote" target="_blank">远程模式Service</a>与响应方的Service之间的通信。可以看成是RMI(远程接口调用)的同款,主要区别在于RedKale里SNCP几乎是透明的,写一个普通的Service通过配置即可实现远程调用,而不需要专门针对远程写接口。SNCP服务的配置与HTTP差不多,只是SNCP不需要Servlet,SncpServlet是通过Service动态生成的。<br/>
|
||||
SNCP的数据包分包头和包体。包头描述请求的Service信息,请求包的包体描述参数的BSON,响应包的包体描述回调的参数对象和结果对象的BSON。<br/>
|
||||
包头固定长度为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>
|
||||
包体数据结构为 ([参数序号][参数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> 协议的网络框架包含五种对象: <br/>
|
||||
|
||||
Reference in New Issue
Block a user