• QuickServer


    QuickServer是个java开元框架,很方面很容易实现多线程、多客户端TCP服务应用。今天在QuickServer网站http://www.quickserver.org/下载文档DevelopersGuidev0.3.zip,此文档详细介绍QuickServer是如何应用的。现在把读后感受写下来,欢迎大家指正:

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

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

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

    Authenticator[可选的]:客户认证

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

    QuickServer - snow - snow的博客

     如何写一个QuickServer服务呢?

    1、首先写一个带有main函数的类,不妨定义为:EchoServer类型,其中main函数包含如下代码:

    public static void main(String[] args) {

         QuickServer myServer =new QuickServer();

         String configFile = ".\src\mypackage\NewFile.xml";(xml配置文件)
         Object config [] = new Object[]{configFile};
         if(myServer.initService(config)){ (初始化SocketServer)
        try{      
            myServer.startQSAdminServer();(启动监控SocketServer服务)
            myServer.startServer();        (启动SocketServer服务)    
       }catch(AppException e ){//todo    
       } catch (Exception e) { //todo
       }
      }
    2、生成一个类,实现接口rg.quickserver.net.server.ClientCommandHandler,此类不妨定义为:HelloWorldCommandHandler

    public class HelloWorldCommandHandler implements ClientCommandHandler {

     public void closingConnection(ClientHandler arg0) throws IOException {
      }

     public void gotConnected(ClientHandler arg0) throws SocketTimeoutException,
       IOException {
       }

     public void handleCommand(ClientHandler arg0, String arg1)
       throws SocketTimeoutException, IOException {
      }

     public void lostConnection(ClientHandler arg0) throws IOException {
     }

    }

    上面的ClientHandler arg0是处理客户端类实例,String arg1是接受到客户端的消息。

    3、生成一个类,继承类QuickAuthenticator,此类不妨定义为:EchoQuickServerAuthenticator

    如果继承类org.quickserver.net.server.QuickAuthenticator,那么当客户端连接QuickServer时候,此类是认证这个客户端的。仅仅有一个此类实例来处理所有客户端的认证。(此实现推荐使用)

    如果继承类org.quickserver.net.server.ServerAuthenticator,那么当客户端连接QuickServer时候,此类是认证这个客户端的。每个被连接客户端将有一个单独此类实例来处理客户端的认证。

    public class EchoQuickServerAuthenticator extends QuickAuthenticator {

     @Override
     public boolean askAuthorisation(ClientHandler arg0) throws IOException,
       AppException {
      String username = askStringInput(arg0,"User Name:");
      String password = askStringInput(arg0,"User Password:");
      if(){
          return true;
      }
      else {
          return false;   
      }  
     }

    }
    注意:不要在此类中存储客户端信息,如果一定要存储客户端信息,请在ClientData类中存放。并且此类不是必须的,可以不实现。

    4、生成一个类,实现接口org.quickserver.net.server.ClientData,不妨定义为:EchoServerData,此类可以存放一下跟客户端有关系的信息,此类有个缺陷:为每个被连接的客户端创建一个ClientData对象,可能是一个资源瓶颈。为了解决这个问题,可以实现接口org.apache.commons.pool.PoolableObjectFactory,并且同时继承EchoServerData类。

    5、写个xml配置文件,不妨定义为:quickServerConfig.xml

     比如:

    <quickserver>
     <name>EchoServer v1.0</name>
     <port>4123</port>
     <bind-address>127.0.0.1</bind-address>
     <client-command-handler>
      mypackage.HelloWorldCommandHandler
     </client-command-handler>
     <authenticator>
      mypackage.EchoQuickServerAuthenticator
     </authenticator>
     <client-data>
      mypackage.EchoServerPoolableData
     </client-data>
     <console-logging-level>INFO</console-logging-level>
     <!--  some extra config, add just to show -->
     <timeout>40000</timeout>
     <timeout-msg>-Err timeout</timeout-msg>
     <max-auth-try>5</max-auth-try>
     <max-auth-try-msg>-Err max try</max-auth-try-msg>
     <max-connect>1</max-connect>
     <max-connect-msg>connect full</max-connect-msg>
     <object-pool>
      <max-active>-1</max-active>
      <max-idle>10</max-idle>
     </object-pool>
     <!-- some extra config end,add just to show -->
     <qsadmin-server>
      <name>EchoQAServer v 1.0</name>
      <port>4124</port>
      <bind-address>127.0.0.1</bind-address>
      <command-plugin>mypackage.QSAdminCommandPlugin</command-plugin>  
     </qsadmin-server>     
    </quickserver>


    总结:步骤1、2是必须的,步骤5信息其实可以写死在步骤1的文件中,不过灵活性不是很好,建议步骤5也是必须写的,步骤3、4是否实现可以根据用户需求,不是必须的。

  • 相关阅读:
    回复结束
    UVA 10537
    RTP 记录 log 该机制
    python 时间处理
    照片总结---选择适当的NoSQL
    博客测试:博客系统i94web beta1.0 申请测试
    SQL随着子查询结果更新多个字段
    2机器学习实践笔记(k-最近邻)
    Android_Service组件详解
    Android多媒体分析-通过MediaStore获取Audio信息
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13318595.html
Copyright © 2020-2023  润新知