理解基于事件的NIOServer.

原文:http://www-128.ibm.com/developerworks/cn/java/l-niosvr/

代码分为框架工具,和框架外代码两个部分.    

      框架实现了短连接的实现方式,即服务端处理请求,返回信息给客户后就关闭连接,用户也关闭连接,这次访问结束.客户应用程序也结束.而服务端程序没有结束,不断地监听是否有新的连接到了,有就处理.处理完再关闭此新的连接.如此循环.
  包括
                Runnable:Server.这是框架的主线程.构造方法传入一个port,生成服务端Socket.并启动N个Reader
                                N个Writer. run()开始监听socket的各种事件.
                Runnable:Reader 读线程池,负责维护所有读线程,run()负责封装Request数据.之后触发onRead时间,
                            注册了该事件的处理器就可以通过Request得到数据,并执行相应的处理.设计的想法是不在此处返回
                            数据给客户端.仅仅在这执行一些别的操作.例如读写数据库之类的.
        之后返回主线程.
                Runnable: Writer 写线程池,接收主线程传来得key,并封装Response对象.之后触发onWriter事件,这样所有
                             注册了该事件的处理器就可以通过Request得到数据,并通过Response返回给客户端.
       设计的思路是:把主要的处理分离出来,放到了事件处理器中.而不是在Writer线程池代码中
                                  去写.
    接口:ServerListener.定义了所有事件方法.
                抽象类:  EventAdapter,实现了ServerListener的所有方法,不过是空的实现.
                单例类:  Notifer 触发器.维护了所有监听者的List.并有出发ServerListener所有事件的触发方法.

     框架外代码包括:
    EventAdapter的子类.具体实现ServerListener中的某个接口.
                服务类:
                         使用框架类: 1,得到单例的Notifer.
                                               2,构造所有EventAdapter的子类.并注册到Notifer.
                                               3,传给Server一个端口,并构造Server线程.并启动.

框架是一个短连接,所谓短连接就是每个客户请求,服务端处理之后就马上关闭.

可以修改成长连接,服务端不关闭客户的连接,除非自己出现了异常,才关闭连接.或者客户端已经关闭连接了,
      服务端才关闭连接.否则一直连着.通讯也都使用同一个连接.
需要修改的地方:1,主线程处理读后注释掉这句话: key.cancel()
                             2,Writer封装完Response,fireOnWriter(Request,Response)之后,不要关闭socketCannel.

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值