做自己的Socket网络通信框架【实现篇】

 

      我把这个Java Socket网络通信框架取名为『susu』并上传到Google code ,svn下载地址为:http://susu.googlecode.com/svn/trunk/ ,关于框架的设计思想在前面一篇已经做了描述,在这里着重介绍一下关键类的实现。

      NioSocketAcceptor、NioSocketConnector两个类的功能比较简单,看一眼就知道是什么意思,Filter定义了过滤器基础方法,主要包括以下的方法:init、destroy和getOrder三个方法。

     

后面 继承了两个接口InputFilter和OutputFilter两个接口的定义如下:


IoHandler 读取数据和发送数据的接口,定义如下:

同时实现的一个通用的Socket读写类AbstractIoHandler,这个是一个抽象类,根据项目的需求继承这个类,然后实现三个个方法

注:一般报文的定义都是报文的头几个字节用来描述整个报文长度, AbstractIoHandler根据这个报文长度来接收一个完整的报文,int getLenthOfLenth 获得使用几个直接来表示一个报文的长度,比如8,那么就是表示报文前8位是用来表示报文长度的。int getLenth(byte[] lenth);表示通过一个 byte[] lenth数组获得一个报文的int长度,因为报文长度可能会用不同的形式表示,比如用8位的一个字符串表示00000435表示报文长度是 435个字节,也有可能用4位的16进制表示,例如00F0 表示报文有15个字节。 boolean hasContainHead()报文头的本身长度是否包涵在报文头里面,举例说明一下, 00000435表示收到的报文头,总共8位,如果报文头本身的长度包含的报文里面,那说明下面还有 435 - 8 =427个字节需要接收,反之 如果报文头本身的长度不包含的报文里面, 那说明下面还有 435个字节要接收。

如果有特殊的需求,只要重新写一个类实现 IoHandler接口就可以了。

 

Session 用于过滤器之间传递数据和用户信息,定义的接口如下

下面介绍一下这个框架的核心部分,AbstractProcessor由N+1个线程组成,一个线程负责从socket读取数据,然后把数据放入队列等待处理,N(CPU的个数或者核数)个处理线程,负责从队列中读取Event 进行处理。具体实现请参考代码。


 


  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值