Convert 组件介绍
+Convert 组件介绍
Convert 是一个比较独立的组件,仅依赖于util包。提供Java对象的序列化与反序列化功能。支持JSON(JavaScript Object Notation)、BSON(Binary Stream Object Notation)两种格式化。 两种格式使用方式完全一样,其性能都大幅度超过其他JSON框架。同时JSON内置于HTTP服务中,BSON也是SNCP协议数据序列化的基础。
Convert 快速上手
+Convert 快速上手
本介绍仅以JSON为例(BSON与JSON使用方式雷同)。其操作类主要是JsonConvert,配置类主要是JsonFactory、ConvertColumn。JsonFactory采用同ClassLoader类似的双亲委托方式设计。
JsonConvert 序列化encode方法:
@@ -394,7 +394,7 @@由上可以看出,Convert的自定义配置完全符合面向对象思想,提倡在JavaBean内部去自定义非常规的构造函数或Decode、Encode方法,通过Factory显式配置的方式通常用于非自己定义的数据类(如 java.io.File)。
-
BSON的协议格式
+BSON的协议格式
BSON类似Java自带的Serializable, 其格式如下: RedKale (中文名: 红菜苔,湖北武汉的一种特产蔬菜) 是基于Java 8全新的微服务框架, 包含HTTP、WebSocket、TCP/UDP、数据序列化、数据缓存、依赖注入等功能。
- 其功能相当于 Tomcat + Mina + Struts + Spring + Hibernate + RMI + JSON + Memcached 的综合体。 RedKale 的HTTP是基于异步NIO.2实现的,所提供的HttpResponse的输出接口也是异步的,因此并不遵循JSR 340规范(Servlet 3.1)且也没有实现Jsp规范。 HTTP只提供四个对象:HttpContext、HttpRequest、HttpResponse、HttpServlet。 传统Session则由数据层实现。RedKale提倡http+json接口(无论网站、PC客户端、APP移动端、第三方接口都可使用统一接口), 因此HTTP层内置了json解析与序列化接口,同时内置http缓存机制。 Convert包是RedKale内一个独立的组件, 用于数据的序列化与反序列化。包分三块:基本包、JSON包、BSON(Binary Stream Object Notation)包。基本包可以用于扩展其他序列化格式(如: XML),其JSON性能是其他任何JSON框架不能媲美的,对于非常规的POJO类也提供了方便的自定义接口。BSON用于数据的二进制序列化与反序列化,支持很复杂的泛型数据,是SNCP协议的基础。 RedKale 的WebSocket接口不同于JSR 340(Servlet 3.1), 除了提供基本的WebSocket功能, 还提供分布式与集中式部署, 当部署多个WebSocket进程时,通过配置文件可以实现WebSocket之间连接信息的数据同步。 SNCP(Service Node Communicate Protocol)是RedKale独有的协议, 类似RMI与WebService的功能结合,主要用于进程间的数据传输。使用者通过配置文件可以轻易的将Service由本地模式变成远程模式。远程模式的Service使用SNCP协议与其他进程的Service通信。使用者无需对远程通信接口使用类似mina的第三方包自行开发。 RedKale 的HTTP是基于异步NIO.2实现的,所提供的HttpResponse的输出接口也是异步的,因此并不遵循JSR 340规范(Servlet 3.1)且也没有实现JSP规范。 HTTP只提供四个对象:HttpContext、HttpRequest、HttpResponse、HttpServlet。 传统Session则由数据层实现。RedKale提倡HTTP+JSON接口(无论网站、PC客户端、APP移动端、第三方接口都可使用统一接口), 因此HTTP层内置了JSON序列化与反序列化接口,同时内置HTTP缓存机制。 RedKale提供DataSource类对数据层进行操作,其功能类似JPA+Memcached。与JPA相比各有优缺点。 SNCP(Service Node Communicate Protocol)是RedKale独有的协议, 类似RMI与WebService的功能结合,主要用于进程间的数据传输。使用者通过配置文件可以轻易的将Service由本地模式变成远程模式。远程模式Service使用SNCP协议与其他进程的Service通信。使用者无需对远程通信接口使用类似Mina的第三方包自行开发。SNCP是RedKale的核心功能,其微服务架构都是基于本地模式Service和远程模式Service。 RedKale提供DataSource类对数据层进行操作,其功能类似JPA+Memcached。最大程度的简化数据层的操作,免去SQL/JPQL语句的编写。同时提供过滤查询与JavaBean的结合、读写分离、数据库热切换、本地/远程部署、进程间缓存自动同步等功能。 Net 组件是基于AIO(NIO.2)的一套TCP/UDP的网络框架,且只提供异步接口。org.redkale.net 是所有网络协议服务的基础包。RedKale内置HTTP和远程模式Service依赖的SNCP(Service Node Communicate Protocol)协议的实现包。RedKale启动的<server>节点服务都是基于Net组件实现的协议。下面详细介绍 HTTP服务 和 SNCP协议。 RedKale自实现的HTTP服务接口并不遵循Java EE规范JSR 340(Servlet 3.1),RedKale提倡的是HTTP+JSON的服务接口方式因此没有实现JSP规范,HTTP+JSON服务接口几乎适合所有类型的客户端(PC应用程序、PC Web、微信H5、移动APP、移动Web)开发。其与JSR 340(Servlet 3.1)的主要区别如下:
SNCP(Service Node Communicate Protocol)协议是RedKale独有的一种传输协议,用于进程之间的通信,即请求方的远程模式Service与响应方的Service之间的通信。可以看成是RMI(远程接口调用)的同款,主要区别在于RedKale里SNCP几乎是透明的,写一个普通的Service通过配置即可实现远程调用,而不需要专门针对远程写接口。SNCP服务的配置与HTTP差不多,只是SNCP不需要Servlet,SncpServlet是通过Service动态生成的。 协议的网络框架包含五种对象: RedKale虽然只有1.xM大小,但是麻雀虽小五脏俱全。既可作为服务器使用,也可当工具包使用。作为独立的工具包提供以下功能: RedKale作为服务器的目录如下: 基于RedKale创建一个Java应用程序工程(即使是Web项目也不要创建Java-Web工程),引用redkale.jar 并创建RedKale所需的几个目录和文件。一个普通的Web项目只需要编写业务层的Service和接入层的HttpServlet的代码。数据库DataSource通过配置文件进行设置。 Application.singleton 运行流程与通过bin脚本启动的流程基本一致,区别在于singleton运行时不会启动Server和Application自身的服务监听。RedKale提倡接入层(Servlet)与业务层(Service)分开,Service在代码上不能依赖于Servlet,因此调试Service自身逻辑时不需要启动接入层服务(类似WebSocket依赖Servlet的功能除外)。 通常一个系统会分为三层:接入层、业务层、数据层。对应到RedKale的组件是: Servlet、Service、Source。大部分系统提供的是HTTP服务,为了方便演示RedKale从集中式到分布式的变化,以一个简单的HTTP服务作为范例。 Service 是RedKale最核心的组件,依赖于Convert、SNCP协议、Resource依赖注入。Service主要处理业务逻辑和操作数据层,是微服务架构中的单一原子服务。每一个Service实例分两种模式: 本地模式和远程模式。其模式由 conf/application.xml 文件来配置。使用者在调用过程中通常不需要区分当前Service实例是哪种模式。 以一个简单的UserService类范例来说明动态生成的两种模式临时类。UserService提供查询用户、注册、登陆、修改用户名功能: 如上配置,若当前进程所在IP是192.168.10.111,则UserService采用本地模式加载。执行register方法时, 先本地执行超类的register,然后远程执行同组的进程(192.168.10.112、192.168.10.113),最后远程执行异组的进程(192.168.20.121、192.168.20.122、192.168.30.131、192.168.30.132)。若当前进程所在IP是192.168.10.100,则UserService采用远程模式加载。需要注意的一点是,每个IP所在的服务必须开通SNCP协议服务以便能接收远程的调用请求。 动态生成的远程模式UserService: 生成远程模式Service时发现参数带有@DynCall注解的方法,在远程调用返回结果时会进行回调处理。 远程模式不仅对@DynCall注解进行处理,而且对方法含有 java.nio.channels.CompletionHandler 的参数也进行异步特殊处理。异步调用对远程模式非常有意义,可以减少同步方式对当前线程的占用时间。也给Source组件的异步调用提供了基础。 Source 主要为数据源提供简易的操作接口,使底层的具体数据源(传统数据库、文件系统、内存数据库、Memcached/Redis缓存)对上层是透明的。其提供两种类型的数据源:DataSource 和 CacheSource。DataSource 为数据库或内存数据库,提供类似JPA、Hibernate的接口与功能。CacheSource 为缓存数据提供类似Memcached、Redis的接口和功能。两者也提供了异步接口(基于远程模式Service)。
JPA虽然已经提供了简洁成熟的数据库操作接口,但当数据、业务量很庞大的时候就显得捉襟见肘,与JPA相比,DataSource有以下几个特点: 如上@FilterGroup 的value 必须是[OR]或者[AND]开头,没有标记@FilterGroup的字段等价于标记了@FilterGroup(value = "[AND]")。[AND]、[OR]后面的字符串为GROUP_NAME,默认的GROUP_NAME为空字符串。如上"[OR]a"可以直接使用"[OR]",有多个[OR]或者[AND]则需要加上不同的NAME。 CacheSource同Memcached类似,像一个带有过期功能地Map容器,存放key-value数据。常见的使用场景就是存放HTTP的Session信息。RedKale把用户会话信息数据当做业务数据处理,而不是接入层的数据。WebSocket的连接态数据也是用CacheSource存储。key为WebSocket的groupid,value为WebSocket服务端节点的IP地址列表。 以上是个简单的范例,用于用户模块存放sessionid。 敬请期待……
1). 基本数据类型: 直接转换成byte[]
2). SmallString(无特殊字符且长度小于256的字符串): length(1 byte) + byte[](utf8); 通常用于类名、字段名、枚举。
diff --git a/index.html b/index.html
index 7dfa8e118..5d55a8a9c 100644
--- a/index.html
+++ b/index.html
@@ -25,45 +25,39 @@
- RedKale 介绍
+ RedKale 介绍
+ 本框架致力于简化集中式和微服务架构的开发,在增强开发敏捷性的同时保持高性能。
RedKale 有如下主要特点:
- 1、大量使用Java 8新特性(接口默认值、Stream、Lambda、JDk8内置的ASM包)
- 2、提供HTTP服务,同时内置JSON功能与限时缓存功能
- 3、TCP层完全使用NIO.2,并统一TCP与UDP的接口
- 4、提供分布式与集中式部署的无缝切换
- 5、提供类似JPA功能,并包含数据缓存自动同步与简洁的数据层操作接口
- 6、功能强大 但体积不到1.5M,且不依赖任何第三方包
+ 1、大量使用Java 8新特性(接口默认值、Stream、Lambda、JDk8内置的ASM等)
+ 2、提供HTTP服务,同时内置JSON功能与限时缓存功能
+ 3、TCP层完全使用NIO.2,并统一TCP与UDP的接口
+ 4、提供分布式与集中式部署的无缝切换
+ 5、提供类似JPA功能,并包含数据缓存自动同步与简洁的数据层操作接口
+ 6、可以动态修改已依赖注入的资源。
- 亮点一. 轻量级HTTP
-
-
- 亮点二. 分布式WebSocket
+
- 亮点三. SNCP协议
+
-
+ RedKale 的WebSocket服务接口不同于JSR 340(Servlet 3.1), 除了提供基本的WebSocket功能, 还提供分布式与集中式部署, 当部署多个WebSocket进程时,通过配置文件可以实现WebSocket之间连接信息的数据同步。
- 亮点四. DataSource
-
- 优点:
- 1、Datasource中的内存缓存会自动与其他同服务的进程之间同步。
- 2、简易的查询接口,即时复杂的过滤查询都无需写SQL语句。
- 3、可以DataSource与业务逻辑层分开, 独立成类似Memcached的内存数据源。
- 4、读写分离。动态切换数据库连接配置。
- 缺点:
- 1、不提供复杂的关联表操作与查询。
+
+
+
+
Net 组件介绍
+ Net 组件介绍
HTTP 服务
+ HTTP 服务
1、内置参数的JSON反序列化和响应结果的序列化接口。
2、对数值型的参数和header值提供简易接口。
@@ -639,7 +639,7 @@
}
}
- SNCP 协议
+ SNCP 协议
SNCP的数据包分包头和包体。包头描述请求的Service信息,请求包的包体描述参数的BSON值,响应包的包体描述回调的参数对象和结果对象的BSON值。
@@ -660,7 +660,7 @@
包体数据结构为 ([参数序号][参数BSON值])* N + [0][结果对象BSON]。 其中参数序号从1开始,只有当Service的方法存在@DynCall回调才会有参数BSON值,序号为0表示为结果对象的BSON值。若方法为void返回类型,则不存在结果对象BSON值。
自定义协议
+ 自定义协议
Context : 协议上下文对象
Request : 服务请求对象
diff --git a/redkale.html b/redkale.html
index c084afb03..6ef3964d5 100644
--- a/redkale.html
+++ b/redkale.html
@@ -24,7 +24,7 @@
RedKale 功能
+ RedKale 功能
1、convert包提供JSON的序列化和反序列化功能,类似Gson、Jackson。
@@ -35,7 +35,7 @@
6、ResourceFactory提供轻量级的依赖注入功能, 类似Google Guice。
RedKale 服务器
+ RedKale 服务器
bin : 存放启动关闭脚本(start.sh、shutdown.sh、start.bat、shutdown.bat)
conf : 存放服务器所需配置文件:
@@ -63,7 +63,7 @@
6、启动进程本身的监听服务。
基于RedKale的开发与调试
+ 基于RedKale的开发与调试
编写完代码可以通过启动脚本进行调试, 也可以在IDE设置项目的主类为 org.redkale.boot.Application 或者工程内定义主类进行启动调试:
RedKale 架构部署
+ RedKale 架构部署
开发一个极简单的小论坛系统。包含三个模块:
用户模块 UserSerivice: 提供用户注册、登录、更新资料等功能, UserServlet作为接入层。
@@ -428,7 +428,7 @@
- appplication.xml 配置说明
+ appplication.xml 配置说明
<?xml version="1.0" encoding="UTF-8"?>
<!--
文件说明:
diff --git a/service.html b/service.html
index f9cdf3e8e..00816c9ed 100644
--- a/service.html
+++ b/service.html
@@ -24,7 +24,7 @@
Service 组件介绍
+ Service 组件介绍
为了能确保本地模式与远程模式自由切换,对Service的实现类有一定的约束:
@@ -33,7 +33,7 @@
RedKale进程启动时扫描可加载的Service实现类,根据配置文件配置的模式采用JDK 8内置的ASM技术动态生成相应的Service临时类进行实例化,并注册到ResourceFactory同其他Service、Servlet依赖注入。
Service 本地模式
+ Service 本地模式
public class UserService implements Service {
@@ -171,7 +171,7 @@
Service 远程模式
+ Service 远程模式
@Resource(name = "")
@SncpDyn(remote = true)
@@ -284,7 +284,7 @@
Service 异步调用
+ Service 异步调用
@Override
public <T> void update(final CompletionHandler<Void, T[]> handler, @DynAttachment final T... values) {
diff --git a/source.html b/source.html
index 827f43cc7..95e194155 100644
--- a/source.html
+++ b/source.html
@@ -24,11 +24,11 @@
Source 组件介绍
+ Source 组件介绍
DataSource 入门
+ DataSource 入门
1、简易的过滤查询接口,但仅支持简单的表关联查询。
@@ -146,7 +146,7 @@
CacheSource 入门
+ CacheSource 入门
public class UserService implements Service {
@@ -179,7 +179,7 @@
}
persistence.xml 配置说明
+ persistence.xml 配置说明
<!-- 其配置算是标准的JPA配置文件的缩略版 -->
<persistence>
<!-- 系统基本库 -->
diff --git a/stylesheets/stylesheet.css b/stylesheets/stylesheet.css
index 2d62bc7a7..3623b0263 100644
--- a/stylesheets/stylesheet.css
+++ b/stylesheets/stylesheet.css
@@ -16,6 +16,10 @@ a {
text-decoration: none;
}
+.anchor {
+ color: #90139E;
+}
+
a:hover {
text-decoration: none;
}
diff --git a/watch.html b/watch.html
index e7ffa5f72..a26b52db0 100644
--- a/watch.html
+++ b/watch.html
@@ -25,7 +25,7 @@
- Watch 组件介绍
+ Watch 组件介绍