一种基于AIO的socket传输系统的制作方法

文档序号:9436146阅读:538来源:国知局
一种基于AIO的socket传输系统的制作方法
【技术领域】
[0001]本发明涉及Java应用远程调用技术领域,尤其涉及一种基于A1的socket传输系统。
【背景技术】
[0002]Java发布ΑΙ0(异步输入/输出)之后,因为A1提供的强大性能,所以成为socket编程(套接字编程)的首选。但由于A1的应用程序编程接口 API相对复杂,并且在多线程编程情况下,需要考虑的应用场景比较复杂。现有的RPC(Remote ProcedureCall Protocol一一远程过程调用协议)调用基本都是在Tcp协议上进行,需要服务端提供socket监听。而大多数RPC框架仍然是基于原始的线程式socket服务器实现,难以在单机上提供数以万计的连接能力。所以推出一个基于A1的socket传输系统,旨在为用户提供强大的底层通讯功能,而让用户只关注业务,无需面对任何socket编程。并且尽可能的做到轻量化,对外只暴露一个业务接口和一个拦截器接口,使用户不再需要关心底层数据传输。只需要专注在业务上即可。

【发明内容】

[0003]本发明要解决的技术问题,在于提供一种基于A1的socket传输系统,本发明充分利用了 A1的系统读写能力,可以在单台机器上,通过线程池管理数以万计的连接。实现了底层TCP协议和上层的完全解耦,使得API接口更简单,客户端无需提供任何东西进行操作。
[0004]本发明是这样实现的:一种基于A1的socket传输系统,所述系统包括数据传输模块、数据拦截器模块以及消息处理模块,所述数据传输模块接收客户端连接请求,在收到连接请求后,系统新建一个Server ChannelInfo通道,该通道对象持有了当前连接过来的socket通道,并且会获取在服务器启动的时候设置的参数,将参数设置到ServerChannelInfo通道之中,将通道Server ChannelInfo中消息数据发送给数据拦截器模块;所述数据拦截器模块在消息数据到达消息处理模块中的消息处理器和离开消息处理器时进行消息的拦截和过滤;所述消息处理模块通过消息处理器处理消息,负责消息数据的分发,系统中线程池资源的准备。
[0005]进一步地,所述数据传输模块包括socket连接响应器、通道读取响应器以及消息写出响应器;所述socket连接响应器负责接收客户端的socket连接请求,所述通道读取响应器负责从Server ChannelInfo通道中读取消息数据,所述消息写出响应器,负责将消息数据从通道发送。
[0006]进一步地,所述消息处理模块包括消息动作类单元、消息请求处理接口单元以及消息处理器;所述消息动作类单元用于给线程池提供消息动作类,并提供调用,负责消息的入口拦截、请求处理、出口拦截以及通道写出操作;所述消息请求处理接口单元,为用户提供消息请求处理接口,使得用户能完成感兴趣的消息的处理,所述消息处理器,负责消息的分发,线程池资源的准备以及消息的处理。
[0007]进一步地,所述Server ChannelInfo通道读取使用的是A1中的异步读取方式,由实现ComplteHandler接口的通道读取响应类ChannelReadHandler来负责;该接口能对消息数据进行分析,以确定是否符合格式的报文文本;并且确定需要读取的大小,将需要读取的数据进行读取;在读取的过程中发生读取缓存大小不足时,此时会自动扩容;以及发生粘包,此时类会将粘包中的数据,读取完整的业务数据的部分,并且将这部分数据组装成抽象消息Message投递到消息处理器,剩余的数据则继续读取直到完整后重复读取流程;在数据读取完毕并且也投递完毕后,通道读取响应器会继续在Server Channel Info通道上监听直到通道关闭或者发生异常为止。
[0008]进一步地,消息写出采用的是A1中的异步写出,由实现了 Complet1nHandler接口的消息写出响应类MessageWriteHandler来负责;通过将抽象消息Message中组装好的WriteBuffer写出到通道中;一旦所有的数据都写出完成,贝Ij会将当前的抽象消息Message内的资源进行释放,并且尝试获取下一个代写的消息,继续进行写出。
[0009]进一步地,所述数据拦截器模块的信息注册是在服务器一开始启动的时候,通过扫描,发现实现了数据拦截器模块接口的类,将所有这样的类集合在一起,并且进行排序;收到消息时进行入口拦截,而消息发出时在对应的位置进行出口拦截;当消息从通道读取监听器获取并组装完毕后就进入消息处理器中等待分配线程资源进行处理,一旦获取到资源就开始执行。
[0010]进一步地,数据拦截器模块处理的规则是一层处理完了交给下一层,入口和出口的位置是相反的;即如果入口的时候是第一个处理,则出口的时候是最后一个处理;数据拦截器模块能返回信息停止后续的拦截处理,直接进入消息处理器,或者能直接中断整个流程,将消息放弃并且关闭通道。
[0011]进一步地,消息处理模块主要由用户实现接口 MessageHandler来注册对某一类型感兴趣的消息;其中消息动作类单元作为线程资源执行的载体,执行消息上的入口拦截,消息处理,出口拦截,以及消息的尝试写出;
[0012]而抽象消息Message作为消息的载体,承载了消息当前所在的通道,消息中的业务数据,以及写出所需的缓存buffer。
[0013]本发明具有如下优点:本发明系统包括数据传输模块、数据拦截器模块以及消息处理模块,所述数据传输模块接收客户端连接请求,在收到连接请求后,系统会新建一个Server ChannelInfo通道,将通道Server ChannelInfo中消息数据发送给数据拦截器模块;数据拦截器模块在消息数据到达消息处理模块中的消息处理器和离开消息处理器时进行消息的拦截和过滤;所述消息处理模块通过消息处理器处理消息,负责消息数据的分发,系统中线程池资源的准备。本发明充分利用了 A1的系统读写能力,可以在单台机器上,通过线程池管理数以万计的连接。实现了底层TCP协议和上层的完全解耦,使得API接口更简单,客户端无需提供任何东西进行操作。
【附图说明】
[0014]图1为本发明系统的框架原理图。
[0015]图2为本发明数据拦截器模块对消息进入和写出的处理流程图。
[0016]图3为本发明系统处理消息的一实施例的原理框图。
[0017]图4为本发明系统处理消息的流程示意图。
【具体实施方式】
[0018]请参阅图1至图4所示,本发明的一种基于A1的socket传输系统,所述系统包括数据传输模块、数据拦截器模块以及消息处理模块,所述数据传输模块接收客户端连接请求,在收到连接请求后,系统新建一个Server ChannelInfo通道,该通道对象持有了当前连接过来的socket通道,并且会获取在服务器启动的时候设置的参数,将参数设置到ServerChannelInfo通道之中,将通道Server ChannelInfo中消息数据发送给数据拦截器模块;所述数据拦截器模块在消息数据到达消息处理模块中的消息处理器和离开消息处理器时进行消息的拦截和过滤;所述消息处理模块通过消息处理器处理消息,负责消息数据的分发,系统中线程池资源的准备。其中,传输系统的底层(即数据传输模块)是为A1的读写接口,采用响应器的模式,即为异步操作模式,通过多线程的方式,最大程度释放系统性能。其中数据传输模块、数据拦截器模块以及消息处理模块中与使用者相关的只有数据拦截器模块和消息处理模块。用户通过实现一个消息处理的接口,来处理用户感兴趣的信息;通过实现拦截接口,实现对消息的拦截,从而方便进行横向编程。而系统中的类以及用户继承接口的类,都通过注解,被1C(控制反转Invers1n of Control,英文缩写为1C是一个重要的面向对象编程的法则来削减计算机程序的耦合问题,也是轻量级的Spring框架的核心。)容器识别以及管理。
[0019]在数据传输模块、数据拦截器模块以及消息处理模块中,贯穿始终的是ServerChannelInfo通道和抽象消息Message。前者代表着通道对象,只要socket通道不关闭,就会持续存在。后者表示单次业务数据的消息对象,会经历从数据传输模块传递到消息处理模块再到数据传输模块写出,然后被销毁。
[0020]其中,所述数据传输模块包括socket连接响应器、通道读取响应器以及消息写出响应器;所述socket连接响应器负责接收客户端的socket连接请求,所述通道读取响应器负责从Server ChannelInfo通道中读取消息数据,所述消息写出响应器,负责将消息数据从通道发送。
[0021]所述消息处理模块包括消息动作类单元、消息请求处理接口单元以及消息处理器;所述消息动作类单元用于给线程池提供消息动作类,并提供调用,负责消息的入口拦截、请求处理、出口拦截以及通道写出操作;所述消息请求处理接口单元,为用户提供消息请求处理接口,使得用户能完成感兴趣的消息的处理,所述消息处理器,负责消息的分发,线程池资源的准备以及消息的处理。
[0022]另外,所述Server ChannelInfo通道读取使用的是A1中的异步读取方式,由实现ComplteHandler接口的通道读取响应类ChannelReadHandler来负责;该接口能对消息数据进行分析,以确定是否符合格式的报文文本;并且确定需要读取的大小,将需要读取的数据进行读取;在读取的过程中发生读取缓存大小不足时,此时会自动扩容;以及发生粘包,此时类会将粘包中的数据,读取完整的业务数据的部分,并且将这部分数据组装成抽象消息Message投递到消息处理器,剩余的数据则继续读取直到完整后重复读取流程;在数据读取完毕并且也投递完毕后,通道读取响应器会继续在Server Channel Info通道上监听直到通道关闭或者发生异常为止。
[002
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1