1.简介

Socket利用第三方框架QuickServe扩展实现Socket通讯工具。

QuickServer是一个免费的开源Java库,用于快速创建健壮的多线程、多客户端TCP服务器应用程序。使用QuickServer,用户可以只集中处理应用程序的逻辑/协议,从而方便的建立功能强大的服务器应用。该程序由Akshathkumar Shetty设计和实现。、

     QuickServer基本构件有4个,分别是:

      ClientCommandHandler[必选的]:处理跟客户端的交互(字符串方式)

      ClientObjectHandler[可选的]:处理客户端的交互(对象方式)

      Authenticator[可选的]:客户认证

      ClientData[可选的]:承载客户端数据

 

 

 

与QuickServer模块相连接的四个组件中只有ClientCommandHandler是必须的。
    QuickServerConfig对象由initService()方法构建。它实现了QuickServer,在读取XML配置后,QuickServerConfig用于QuickServer配置。
   ClientHandler线程对象用于客户端缓冲池。可选的ClientData类与ClientHandler类关联,ClientHandler对 象容器参考ClientCommandHandler,ClientObjectHandler(可选),Authenticator(可选)对象包含在QuickServer主函数中。
    注意:上图中并未显示QSAdminServer,它是图中QuickServer的组成部分。

 

2.数据模式和数据类型

 直到现在我们的通信还是仅仅在使用以<CR><LF>(在文本处理中, CR, LF, CR/LF是不同操作系统上使用的换行符.Dos和windows采用回车+换行CR/LF表示下一行, 而UNIX/Linux采用换行符LF表示下一行,苹果机(MAC OS系统)则采用回车符CR表示下一行.CR用符号’r’表示, 十进制ASCII代码是13, 十六进制代码为0x0D; LF使用’n’符号表示, ASCII代码是10, 十六制为0x0A.所以Windows平台上换行在文本文件中是使用 0d 0a 两个字节表示, 而UNIX和苹果平台上换行则是使用0a或0d一个字节表示.一般操作系统上的运行库会自动决定文本文件的换行格式. 如一个程序在windows上运行就生成CR/LF换行格式的文本文件,而在Linux上运行就生成LF格式换行的文本文件.)结尾的字符串。当然,在Internet标准协议里它是最常用的。但有时我们可能需要接收字节流或Java对象。     下面是数据模式和数据类型,使用它你可以告诉ClientHandler使用哪一种通信模式。    

     数据模式用于定义QuickServer和客户Socket之间的数据交换格式。下面是目前支持的三种模式:

  • DataMode.STRING - 这是默认的交换模式,在这种模式下你可以接收字符串数据(以<CR><LF>结尾)
  • DataMode.OBJECT - 在这种模式里你可以接收可序列化的Java对象。这种模式仅仅使用在客户端可以写java的情况下。
  • DataMode.BYTE - 在这种模式下你可以接收客户端发送的所有字节,包括<CR>或<LF>或任何其它控制字符。这种模式在处理基于客户机或无标准协议如xml或你自己定义的协议的硬件时非常有用。 数据类型用户定义QuickServer和客户Socket之间的数据交换类型。目前有两种格式:
  • DataType.IN - 指定数据为输入QuickServer的数据。
  • DataType.OUT - 指定数据为从QuickServer输出的数据。

    任何数据类型的数据模式都可以使用ClientHandler的setDataMode()方法设置,格式如下     setDataMode(DataMode dataMode, DataType dataType) 注意:    当模式为DataMode.OBJECT类型为DataType.IN,调用将会阻塞,直到客户端的ObjectOutputStream被写和头被刷新。 

3. 主要特点
  o 创建多线程、多客户端TCP服务器应用程序
  o 支持安全服务的创建:SSL, TLS
  o 清楚的分离服务、协议、验证逻辑
  o GUI图形界面远程管理支持
  o Command Shell对服务器的本地管理
  o 无须断开客户端连接的重启或延迟服务
  o 为线程的再利用和大多数的使用对象建立缓冲池
  o 完全的日志支持(Java构建)
  o 支持发送和接收字符串、字节、二进制、序列化Java对象
  o 在同样的xml中支持能够存贮指定应用数据的XML配置
  o 支持通过IP地址限制服务
  o 支持基于XML的JDBC映射
  o 支持服务配置模式
  o 支持从xml加载/重新加载用于jar包
  o 在QuickServer中添加处理hooks
  o 指定允许的最大客户端连接数
  o 在通常的TCP连接上支持谈判安全连接
  o 支持鉴别和查询客户端
  o 附带典型例子——FTPServer, CmdServer,EchoWebServer, ChatServer

4. 1.4版的新功能
  o 为QuickServer添加安全模式:SSL, TLS
  o 添加SecureManagerLoader管理安全模式
  o 在通常的TCP连接上添加谈判安全连接
  o 添加初始化服务hooks
  o 为通信添加二进制模式
  o 为QsAdminServer通信添加QSAdminAPI
  o 为QuickServer 添加findAllClientByKey
  o 添加ConnectionLostException类
  o 改进ClientHandler、安全配置
  o 新例子——XmlAdder:一个简单的xml服务,可添加两个整数
  o 新例子——PipeServer:一个简单的重定向服务     

5.使用    

  要配置QuickServer首先要写配置文件,然后告诉QuickServer加载这个配置。下面是一个非常简单的配置文件    

  <quickserver>        

       <name>EchoServer v 1.0</name>        

      <client-command-handler>echoserver.EchoCommandHandler </client-command-handler>    

  </quickserver>    

  现在有两种方式启动服务器

  •  使用QuickServer启动参数--load 在这里你要做的是在启动QuickServer时使用"-load"指定xml配置文件的路径。例如

         java -jar QuickServer.jar -load myxmlconfig.xml 或

         java org.quickserver.net.server.QuickServer -load myxmlconfig.xml 或

         quickserver.bat -load myxmlconfig.xml

  • 使用QuickServer的initService()方法 有时你可能需要在启动你的应用时使用自己的jar文件或类文件,或者你可能想要在启动前添加一些代码,那么这个选择是最合适的。

      

posted on 2012-06-11 11:03  NeverGiveUp_ZONE  阅读(2095)  评论(0编辑  收藏  举报