From 5a61b5122ffaf05e97d9a476be88fa2217853c00 Mon Sep 17 00:00:00 2001
From: wentch <22250530@qq.com>
Date: Thu, 21 Jan 2016 10:55:10 +0800
Subject: [PATCH]
---
net.html | 19 +++++++++++++++++++
service.html | 5 ++++-
source.html | 2 +-
stylesheets/stylesheet.css | 11 ++++++++---
4 files changed, 32 insertions(+), 5 deletions(-)
diff --git a/net.html b/net.html
index 2ecd9dcb2..3137fb4ea 100644
--- a/net.html
+++ b/net.html
@@ -640,6 +640,25 @@
}
SNCP 协议
+
+ SNCP(Service Node Communicate Protocol)协议是RedKale独有的一种传输协议,用于进程之间的通信,即请求方的远程模式Service与响应方的Service之间的通信。可以看成是RMI(远程接口调用)的同款,主要区别在于RedKale里SNCP几乎是透明的,写一个普通的Service通过配置即可实现远程调用,而不需要专门针对远程写接口。SNCP服务的配置与HTTP差不多,只是SNCP不需要Servlet,SncpServlet是通过Service动态生成的。
+ SNCP的数据包分包头和包体。包头描述请求的Service信息,请求包的包体描述参数的BSON,响应包的包体描述回调的参数对象和结果对象的BSON。
+ 包头固定长度为72字节,其结构如下:
+
+
+ | 字段 | 占用字节数 | 描述 |
+ | 序列号 | 8 | 请求的唯一序列号 |
+ | 包头长度 | 2 | 值固定为72 |
+ | Service类名hash值 | 16 | Service类名class.getName()的MD5值 |
+ | Service资源hash值 | 16 | Service资源名@Resource.name()的MD5值 |
+ | Service方法hash值 | 16 | Service方法method.toString()的MD5值 |
+ | 发送方地址 | 6 | 前4字节为地址,后2字节为端口号 |
+ | 包体长度 | 4 | 整个包体的长度 |
+ | 结果码 | 4 | 请求方的值固定为0,响应方的值视为错误码,为0表示成功,非0为失败。 |
+
+
+ 包体数据结构为 ([参数序号][参数BSON值])* N + [0][结果对象BSON]。 其中参数序号从1开始,只有当Service的方法存在@DynCall回调才会有参数BSON,序号为0表示为结果对象的BSON值。若方法为void返回类型,则不存在结果对象BSON值。
+
自定义协议
协议的网络框架包含五种对象:
diff --git a/service.html b/service.html
index 4e00b0f9b..87e2cbd20 100644
--- a/service.html
+++ b/service.html
@@ -233,7 +233,10 @@
}
}
-
由以上代码可以看出来,远程模式Service是根据本地模式Service临时类动态生成的。远程类执行方法时通过SNCP协议将参数序列化并带上当前方法信息传输到远程服务器上,执行完后将结果流反序列化并返回, 其流程与WebService类似。与WebService最大的区别在于,远程模式的Service允许修改参数本身的内容。范例如下:
+ 由以上代码可以看出来,远程模式Service是根据本地模式Service临时类动态生成的。远程类执行方法时通过SNCP协议将参数序列化并带上当前方法信息传输到远程服务器上,执行完后将结果流反序列化并返回, 其流程与WebService类似。
+
+ 远程模式的@DynCall回调
+ 与WebService的区别除了更具性能的二进制的数据格式,更差异的是远程模式的Service允许修改参数本身的内容。范例如下:
/**
* 由于该方法在处理过程中修改了参数bean的内容,为了保证本地模式与远程模式的一致性,需要提供@DynCall回调接口
*
diff --git a/source.html b/source.html
index ea203ba5c..0d3f41dcd 100644
--- a/source.html
+++ b/source.html
@@ -26,7 +26,7 @@
Source 组件介绍
- Source 提供两种类型的数据源:DataSource 和 CacheSource。DataSource 为数据库或内存数据库,提供类似JPA、Hibernate的接口与功能。CacheSource 为缓存数据 提供类似Memcached、Redis的接口和功能。两者也提供了异步接口(基于远程模式的Service)。
+ Source 提供两种类型的数据源:DataSource 和 CacheSource。DataSource 为数据库或内存数据库,提供类似JPA、Hibernate的接口与功能。CacheSource 为缓存数据 提供类似Memcached、Redis的接口和功能。两者也提供了异步接口(基于远程模式Service)。
DataSource 入门
diff --git a/stylesheets/stylesheet.css b/stylesheets/stylesheet.css
index a5d8228cc..2d62bc7a7 100644
--- a/stylesheets/stylesheet.css
+++ b/stylesheets/stylesheet.css
@@ -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) {