[发明专利]一种基于nio的简易高效的socket通信框架有效
申请号: | 201210228761.3 | 申请日: | 2012-07-03 |
公开(公告)号: | CN103530172B | 公开(公告)日: | 2016-11-30 |
发明(设计)人: | 孟文超;赵新阳;彭乐;藏磊;刘晓 | 申请(专利权)人: | 上海宝信软件股份有限公司 |
主分类号: | G06F9/46 | 分类号: | G06F9/46;H04L29/06;H04L29/08 |
代理公司: | 上海汉声知识产权代理有限公司 31236 | 代理人: | 郭国中 |
地址: | 201203 上海市浦*** | 国省代码: | 上海;31 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 基于 nio 简易 高效 socket 通信 框架 | ||
技术领域
本发明涉及网络编程技术领域,具体地说,涉及的是一种基于nio的简易高效的socket通信框架。
背景技术
网络编程是所有具有通信需求的软件开发面临的共同问题,实现高效、稳定的通信基础框架对于提高软件开发的质量、开发速度都具有非常重要的意义。Java编程语言提供了nio的网络编程基础接口,但是用户使用起来仍然非常不方便,甚至带来效率方面的瓶颈。
Java网络编程存在着如下普遍性的问题:
1.传统的IO包是基于阻塞模型的,在处理高并发访问请求时,需要并发多个线程,线程调度的消耗对程序效率影响极大。
2.nio改正了传统模型的缺陷,有读写事件时,会有主动通知机制。但是nio提供的编程接口复杂,用户不容易掌握,代码写起来复杂,且常常会由于忘记处理各种各样的异常产生错误,不能充分发挥nio的优势。
经检索发现,申请号为200710079396.3的中国专利,该发明公开了“一种处理异步消息队列的方法,包括步骤:A.异步socket将接收到的底层数据放入接收缓存,判断异步消息队列中是否有未读取的异步读消息,如果异步消息队列中没有未读取的异步读消息则向所述异步消息队列中写入一异步读消息,执行步骤B,如果异步消息队列中有未读取的异步读消息,则执行步骤B;B.上层协议读取所述异步读消息后,从异步socket接收缓存中读取底层数据。本发明还公开了一种处理异步消息队列的系统和一种异步socket。”
该发明与本发明的技术要点比较:
1.该发明为了解决底层socket异步消息队列满载的情况,侧重于协议层次的优化;本发明侧重在上层的架构层次的优化,提供一个易用、高效的socket框架。
2.该发明着重解决异常状态下异步消息对异步队列的过量占用情况,通过提高上层协议的处理速度来解决这个问题,但是上层协议的实现用户无法掌控,在上层协议处理消息慢的情况下,异步socket就变成了同步socket;本发明通过在session中设计消息队列,在上层协议中做缓存,提高消息处理速度,可以更好的解决这个问题。
申请号为200810170990.8的中国专利,该发明公开了“一种socket数据传输处理方法及装置,该方法为将socket数据写入内存队列中;如果内存队列已满,则按socket数据的优先级写入相应优先级的缓存文件中;再轮询读取缓存文件,实时地将缓存文件中的socket数据写入到内存队列中;然后内存队列将socket数据传输给读取socket数据的接口。”
该发明与本发明的技术要点比较:
1.该发明解决了接收消息的内存队列满的情况下,通过写入缓存文件的方式解决这个问题;本发明侧重于设计整个socket网络通讯的架构。
2.该发明可以和本发明的方案一起使用,提高网络程序的稳定性和可靠性。在本发明中session中设计了接收队列来缓存消息,在消息数量过多的情况下可以综合该方案对队列进行优化,通过写入缓存来防止数据丢失。
发明内容
本发明的目的在于解决现有技术中的上述不足,提供一种基于nio的简易高效的socket通信框架,在nio包的基础上构建了一个简易高效的socket框架,既降低用户网络编程的复杂度,同时也能保证程序的性能。
为实现上述的目的,本发明所述的基于nio的简易高效的socket通信框架,主要分为两个部分,TCP连接建立部分和IO读写处理部分。客户端或者服务端连接建立之后,将建立起的会话(session)交给IO读写处理部分。本发明将客户端和服务端的连接建立部分抽象出来,根据socket连接建立之后进行的都是IO操作的共同点,将连接建立和IO读写处理分离,最大可能的实现了代码的复用。
连接建立部分包含客户端连接建立和服务端连接建立。服务端部分启动时开启监听端口,等待客户端的连接。连接建立后,将建立的socket以及建立时间等信息封装为session,交给IO读写处理部分进行读写处理。
IO读写处理部分主要用来处理IO事件,由于高并发socket时瓶颈在于IO读写,为了充分利用IO资源,本模块采用多线程。线程数目可以配置,并且在没有待处理的session时,线程会自动结束,释放系统资源。
本发明提供session用来保存从TCP连接建立到连接关闭之间所用到的和此连接相关的所有状态信息。主要包含以下部分:
1.和此session关联的客户端和服务端连接信息,客户端地址、服务端地址等。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于上海宝信软件股份有限公司,未经上海宝信软件股份有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201210228761.3/2.html,转载请声明来源钻瓜专利网。
- 上一篇:内凹式滚子轴承
- 下一篇:一种精确定位的走料装置