From e465e86706fbf0b0ef46e087f5758391d0ab1209 Mon Sep 17 00:00:00 2001 From: wentch <22250530@qq.com> Date: Tue, 26 Jan 2016 17:20:37 +0800 Subject: [PATCH] --- convert.html | 6 ++--- index.html | 48 +++++++++++++++++--------------------- net.html | 8 +++---- redkale.html | 10 ++++---- service.html | 8 +++---- source.html | 8 +++---- stylesheets/stylesheet.css | 4 ++++ watch.html | 2 +- 8 files changed, 46 insertions(+), 48 deletions(-) diff --git a/convert.html b/convert.html index b97d00cc6..50bff7e54 100644 --- a/convert.html +++ b/convert.html @@ -24,11 +24,11 @@
-

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, 其格式如下:
                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 (中文名: 红菜苔,湖北武汉的一种特产蔬菜) 是基于Java 8全新的微服务框架, 包含HTTP、WebSocket、TCP/UDP、数据序列化、数据缓存、依赖注入等功能。 - 其功能相当于 Tomcat + Mina + Struts + Spring + Hibernate + RMI + JSON + Memcached 的综合体。
+ 本框架致力于简化集中式和微服务架构的开发,在增强开发敏捷性的同时保持高性能。
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

-

      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缓存机制。

+

-

- 亮点二. 分布式WebSocket

+

        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协议

+

-

      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 的WebSocket服务接口不同于JSR 340(Servlet 3.1), 除了提供基本的WebSocket功能, 还提供分布式与集中式部署, 当部署多个WebSocket进程时,通过配置文件可以实现WebSocket之间连接信息的数据同步。

-

- 亮点四. DataSource

-

      RedKale提供DataSource类对数据层进行操作,其功能类似JPA+Memcached。与JPA相比各有优缺点。
- 优点:
-       1、Datasource中的内存缓存会自动与其他同服务的进程之间同步。
-       2、简易的查询接口,即时复杂的过滤查询都无需写SQL语句。
-       3、可以DataSource与业务逻辑层分开, 独立成类似Memcached的内存数据源。
-       4、读写分离。动态切换数据库连接配置。
- 缺点:
-       1、不提供复杂的关联表操作与查询。

+

+ +

        SNCP(Service Node Communicate Protocol)是RedKale独有的协议, 类似RMI与WebService的功能结合,主要用于进程间的数据传输。使用者通过配置文件可以轻易的将Service由本地模式变成远程模式远程模式Service使用SNCP协议与其他进程的Service通信。使用者无需对远程通信接口使用类似Mina的第三方包自行开发。SNCP是RedKale的核心功能,其微服务架构都是基于本地模式Service远程模式Service

+ + +

+ +

        RedKale提供DataSource类对数据层进行操作,其功能类似JPA+Memcached。最大程度的简化数据层的操作,免去SQL/JPQL语句的编写。同时提供过滤查询与JavaBean的结合、读写分离、数据库热切换、本地/远程部署、进程间缓存自动同步等功能。

RedKale © wentch     欢迎加入RedKale技术交流QQ群: 527523235 diff --git a/net.html b/net.html index bddf50ee7..e58ebbc83 100644 --- a/net.html +++ b/net.html @@ -24,10 +24,10 @@
-

Net 组件介绍

+

Net 组件介绍

        Net 组件是基于AIO(NIO.2)的一套TCP/UDP的网络框架,且只提供异步接口。org.redkale.net 是所有网络协议服务的基础包。RedKale内置HTTP和远程模式Service依赖的SNCP(Service Node Communicate Protocol)协议的实现包。RedKale启动的<server>节点服务都是基于Net组件实现的协议。下面详细介绍 HTTP服务SNCP协议

-

HTTP 服务

+

HTTP 服务

        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)的主要区别如下:
                1、内置参数的JSON反序列化和响应结果的序列化接口。
                2、对数值型的参数和header值提供简易接口。
@@ -639,7 +639,7 @@ } } -

SNCP 协议

+

SNCP 协议

        SNCP(Service Node Communicate Protocol)协议是RedKale独有的一种传输协议,用于进程之间的通信,即请求方的远程模式Service与响应方的Service之间的通信。可以看成是RMI(远程接口调用)的同款,主要区别在于RedKale里SNCP几乎是透明的,写一个普通的Service通过配置即可实现远程调用,而不需要专门针对远程写接口。SNCP服务的配置与HTTP差不多,只是SNCP不需要Servlet,SncpServlet是通过Service动态生成的。
        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 功能

        RedKale虽然只有1.xM大小,但是麻雀虽小五脏俱全。既可作为服务器使用,也可当工具包使用。作为独立的工具包提供以下功能:
                1、convert包提供JSON的序列化和反序列化功能,类似Gson、Jackson。
@@ -35,7 +35,7 @@                 6、ResourceFactory提供轻量级的依赖注入功能, 类似Google Guice。

-

RedKale 服务器

+

RedKale 服务器

        RedKale作为服务器的目录如下:
                bin   : 存放启动关闭脚本(start.sh、shutdown.sh、start.bat、shutdown.bat)
                conf : 存放服务器所需配置文件:
@@ -63,7 +63,7 @@                 6、启动进程本身的监听服务。

-

基于RedKale的开发与调试

+

基于RedKale的开发与调试

        基于RedKale创建一个Java应用程序工程(即使是Web项目也不要创建Java-Web工程),引用redkale.jar 并创建RedKale所需的几个目录和文件。一个普通的Web项目只需要编写业务层的Service和接入层的HttpServlet的代码。数据库DataSource通过配置文件进行设置。
        编写完代码可以通过启动脚本进行调试, 也可以在IDE设置项目的主类为 org.redkale.boot.Application 或者工程内定义主类进行启动调试:

@@ -83,7 +83,7 @@ }

        Application.singleton 运行流程与通过bin脚本启动的流程基本一致,区别在于singleton运行时不会启动Server和Application自身的服务监听。RedKale提倡接入层(Servlet)与业务层(Service)分开,Service在代码上不能依赖于Servlet,因此调试Service自身逻辑时不需要启动接入层服务(类似WebSocket依赖Servlet的功能除外)。

-

RedKale 架构部署

+

RedKale 架构部署

        通常一个系统会分为三层:接入层、业务层、数据层。对应到RedKale的组件是: Servlet、Service、Source。大部分系统提供的是HTTP服务,为了方便演示RedKale从集中式到分布式的变化,以一个简单的HTTP服务作为范例。
        开发一个极简单的小论坛系统。包含三个模块:
                用户模块    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 是RedKale最核心的组件,依赖于Convert、SNCP协议、Resource依赖注入。Service主要处理业务逻辑和操作数据层,是微服务架构中的单一原子服务。每一个Service实例分两种模式: 本地模式远程模式。其模式由 conf/application.xml 文件来配置。使用者在调用过程中通常不需要区分当前Service实例是哪种模式。
         为了能确保本地模式与远程模式自由切换,对Service的实现类有一定的约束:
@@ -33,7 +33,7 @@          RedKale进程启动时扫描可加载的Service实现类,根据配置文件配置的模式采用JDK 8内置的ASM技术动态生成相应的Service临时类进行实例化,并注册到ResourceFactory同其他Service、Servlet依赖注入。

-

Service 本地模式

+

Service 本地模式

        以一个简单的UserService类范例来说明动态生成的两种模式临时类。UserService提供查询用户、注册、登陆、修改用户名功能:

public class UserService implements Service {
@@ -171,7 +171,7 @@
                 

        如上配置,若当前进程所在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协议服务以便能接收远程的调用请求。

-

Service 远程模式

+

Service 远程模式

        动态生成的远程模式UserService:

@Resource(name = "")
 @SncpDyn(remote = true)
@@ -284,7 +284,7 @@
                 

        生成远程模式Service时发现参数带有@DynCall注解的方法,在远程调用返回结果时会进行回调处理。

-

Service 异步调用

+

Service 异步调用

        远程模式不仅对@DynCall注解进行处理,而且对方法含有 java.nio.channels.CompletionHandler 的参数也进行异步特殊处理。异步调用对远程模式非常有意义,可以减少同步方式对当前线程的占用时间。也给Source组件的异步调用提供了基础。

    @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 组件介绍

         Source 主要为数据源提供简易的操作接口,使底层的具体数据源(传统数据库、文件系统、内存数据库、Memcached/Redis缓存)对上层是透明的。其提供两种类型的数据源:DataSource 和 CacheSource。DataSource 为数据库或内存数据库,提供类似JPA、Hibernate的接口与功能。CacheSource 为缓存数据提供类似Memcached、Redis的接口和功能。两者也提供了异步接口(基于远程模式Service)。

-

DataSource 入门

+

DataSource 入门

        JPA虽然已经提供了简洁成熟的数据库操作接口,但当数据、业务量很庞大的时候就显得捉襟见肘,与JPA相比,DataSource有以下几个特点:
                 1、简易的过滤查询接口,但仅支持简单的表关联查询。
@@ -146,7 +146,7 @@

        如上@FilterGroup 的value 必须是[OR]或者[AND]开头,没有标记@FilterGroup的字段等价于标记了@FilterGroup(value = "[AND]")。[AND]、[OR]后面的字符串为GROUP_NAME,默认的GROUP_NAME为空字符串。如上"[OR]a"可以直接使用"[OR]",有多个[OR]或者[AND]则需要加上不同的NAME。

-

CacheSource 入门

+

CacheSource 入门

         CacheSource同Memcached类似,像一个带有过期功能地Map容器,存放key-value数据。常见的使用场景就是存放HTTP的Session信息。RedKale把用户会话信息数据当做业务数据处理,而不是接入层的数据。WebSocket的连接态数据也是用CacheSource存储。key为WebSocket的groupid,value为WebSocket服务端节点的IP地址列表。

public class UserService implements Service {
 
@@ -179,7 +179,7 @@
 }

        以上是个简单的范例,用于用户模块存放sessionid。

-

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 组件介绍

敬请期待……