一种网络通信框架的设计方法与流程

文档序号:15845310发布日期:2018-11-07 08:56阅读:203来源:国知局
一种网络通信框架的设计方法与流程

本发明涉及网络程序设计技术领域,特别涉及一种网络通信框架的设计方法。

背景技术

软件框架就是软件工程中的框架。一般而言,一个软件框架总是面向软件应用的某个领域,它用某种编程语言为该领域的使用者搭建好骨架。而使用者在框架的约束内,通过框架提供的接口,完成一定的应用功能。框架提供了很好的应用性,使开发人员不必每次都从头开始。同时,框架通过良好的设计屏蔽了该领域内最烦琐的细节部分,使不熟悉该领域的开发者也能对该领域进行开发。框架也为开发者提供了一个稳定的基础环境,加快了开发进程。

软件框架需要具备以下属性:

1.框架是一个内聚的接口和类的集合,这些接口和类相互协助,提供核心的服务功能和逻辑子系统中不变的部分。

2.框架包含了的抽象的类,这些抽象类定义了框架中用户需要遵循的约束,包含了对象的交互过程和不变量。

3.通常框架的使用者需要定义框架中部分类的子类,才能定制、利用、扩展框架的功能。

4.框架包含有抽象方法和具体方法的抽象类。

框架采用hollywood原则“不要找我们,我们会打电话给你”。通常意味着用户通过定义框架中既有类的子类,从框架中获取消息。



技术实现要素:

本发明的目的在于克服现有技术的缺点与不足,提供一种网络通信框架的设计方法,利用此框架可以使开发人员在不了解底层socket通信细节的情况下开发出稳定、高性能的网络应用程序。

本发明的目的通过以下的技术方案实现:一种网络通信框架的设计方法,包括网络抽象层、数据处理层、开放api层的设计步骤;

网络抽象层对操作系统提供的socket编程接口进行封装,对不同版操作系统提供的编程接口进行屏蔽,为数据处理层提供一致的操作接口;网络抽象层还需要选定一种特定的网络i/o模型;

数据处理层处理开放api层与网络抽象层发送过来的数据及策略的选择;另外,它还需要进行session管理;session对象存储特定用户会话所需的属性及配置信息,这样框架就可以区别出接收与发送的数据包与之关联的客户端;

开放api层定义了整个框架的对外接口,它向用户表明此框架可提供的功能与服务;同时,它还定义了编程规范,可以对开发人员进行编程约束;这层不负责具体的功能实现,只是适配与转发功能;此层的设计遵循常用的接口设计规范。

优选的,网络通信框架还包括辅助模块层,辅助模块层包含了框架需要用到的非核心功能,包括日志功能、配置功能、进程通信、缓存模块功能;日志模块记录了整个框架运行的信息;配置模块为框架提供相应的配置信息。

优选的,网络抽象层选定的网络i/o模型为完成端口,可以把完成端口看成系统维护的一个队列,操作系统把重叠io操作完成的事件通知放到该队列里,由于是暴露“操作完成”的事件通知,所以命名为“完成端口”;一个socket被创建后,可以在任何时刻和一个完成端口联系起来。

优选的,调用开放api层的步骤包括:

创建一个appsession对象,它代表一个和客户端的逻辑连接,基于连接的操作定义在该类之中;用该类的实例发送数据到客户端,接收客户端发送的数据或者关闭连接;

创建一个appserver对象,它代表了监听客户端连接,承载tcp连接的服务器实例;服务器级别的操作和逻辑定义在此类之中。

优选的,session之间相互独立互不干扰且拥有唯一sessionid标识,维护着客户与服务器通信的生命周期,其生命周期包括创建、初始化、启动、运行、关闭过程。

优选的,session的创建源于服务器监听端口接收到一个客户端连接请求取出该连接的socket触发新客户端请求事件。

具体的,创建完appsession后需要初始化;初始完appsession就可以启动session;启动的过程主要是将start方法传给一个task并行任务执行;自此appsession将开始工作接收客户端发送的信息;其工作模式为:开始接收数据包,接收完成后处理该数据包,进而继续接收数据,此过程均为同步进行;session生命周期中的最后一步是关闭;session的关闭将触发appserver会话关闭事件,进而回收会话相关资源,到此一次完整的会话周期完成。

优选的,数据处理层处理通信协议,将二进制数据转化成应用程序可以理解的请求;requestinfo是表示来自客户端请求的实体类;每个来自客户端的请求都能被实例化为requestinfo类型;requestinfo类型必须实现接口irequestinfo,该接口只有一个名为“key”的字符串类型的属性;

为了业务逻辑处理的方便,来自客户端的请求最终会被影射成命令;命令类需要实现icommand<tappsession,trequestinfo>:icommand接口;请求处理代码需置于icommand<tappsession,trequestinfo>接口的executecommand(tappsessionsession,trequestinforequestinfo)方法中;icommand接口中只包含一个name属性,属性值用于匹配接收到请求实例的key;当一个请求实例被收到时,框架将会通过匹配请求实例的key和命令的name的方法来查找用于处理该请求的命令。

优选的,辅助模块层包含日志模块;当框架运行时,日志系统会自动启动;框架调用者不需要创建自己的日志工具,直接使用框架内置的日志功能;框架默认使用log4net作为第三方日志框架;框架允许自定义logger。

本发明与现有技术相比,具有如下优点和有益效果:

1、简单易用,只需要定义几个类便可创建出健壮的socket服务器程序。

2、支持同步与异步两种通信模式,只需要修改一下配置文件就能将程序从一种模式切换成另一种模式。

3、支持多个socket程序实例,可以在配置文件中定义多个运行在不同端口上的socket程序实例。

4、灵活的日志策略能够记录大部分的socket行为。

附图说明

图1是实施例方法的架构示意图。

图2是实施例方法的请求处理模型图。

具体实施方式

下面结合实施例及附图对本发明作进一步详细的描述,但本发明的实施方式不限于此。

实施例1

基于windows平台设计的一种网络编程框架。利用此框架可以使开发人员在不了解底层socket通信细节的情况下开发出稳定、高性能的网络应用程序,让开发人员更专注于业务细节而不用处理网络通信技术中的细节问题。通常而言,编写网络应用程序都需要处理同步异步、丢包粘包、拆包组包问题,需要考虑内存管理、缓存设计相关问题,需要使用到多线程技术,需要将性能与稳定性等因素考虑进去。这些技术细节与具体的业务并不紧密相关联,因此都可以在网络框架中进行处理。

本方案采用软件分层架构设计,最核心部件分为网络抽象层、数据处理层、开放api层、辅助模块层。

网络抽象层主要职责是对操作系统提供的socket编程接口进行封装,对不同版操作系统提供的编程接口进行屏蔽,为数据处理层提供一致的操作接口。另外,网络层还需要选定一种特定的网络i/o模型。本方案中选择的是完成端口。可以把完成端口看成系统维护的一个队列,操作系统把重叠io操作完成的事件通知放到该队列里,由于是暴露“操作完成”的事件通知,所以命名为“完成端口”。一个socket被创建后,可以在任何时刻和一个完成端口联系起来。

数据处理层主要职责是处理开放api层与网络层发送过来的数据及策略的选择。另外,它还需要进行session(会话)管理。session对象存储特定用户会话所需的属性及配置信息。这样框架就可以区别出接收与发送的数据包与之关联的客户端。session之间相互独立互不干扰且拥有唯一sessionid标识,维护着客户与服务器通信的生命周期,其生命周期主要由创建、初始化、启动、运行、关闭过程组成。

session的创建源于服务器监听端口接收到一个客户端连接请求取出该连接的socket触发新客户端请求事件。代码框架如下:

创建完appsession后需要初始化,在初始化socketsession过程中主要完成了发送队列参数和代理设置。

初始完appsession就可以启动session。启动的过程主要是将start方法传给一个task并行任务执行。自此appsession将开始工作接收客户端发送的信息。其工作模式为:开始接收数据包,接收完成后处理该数据包,进而继续接收数据,此过程均为同步进行。

session生命周期中的最后一步是关闭。session的关闭将触发appserver会话关闭事件,进而回收会话相关资源,到此一次完整的会话周期完成。

开放api层主要定义了整个框架的对外接口,它向用户表明此框架可提供的功能与服务。同时,它还定义了编程规范,可以对开发人员进行编程约束。这层不负责具体的功能实现,只是适配与转发功能。此层的设计遵循常用的接口设计规范。

辅助模块层包含了框架需要用到的非核心功能,分别是日志功能、配置功能、进程通信、缓存模块等功能。日志模块记录了整个框架运行的信息。配置模块为框架提供相应的配置信息,网络框架通常是以服务的形式运行着,并没有相应的界面可以操作,配置模块是一个较重要的辅助模块。

如图1所示,本方案的结构图中最上层的为开放api层。要调用本层api需要按如下步骤:

1.创建一个appsession对象,它代表一个和客户端的逻辑连接,基于连接的操作应该定义在该类之中。可以用该类的实例发送数据到客户端,接收客户端发送的数据或者关闭连接。

2.创建一个appserver对象,它代表了监听客户端连接,承载tcp连接的服务器实例。理想情况下,可以通过appserver实例获取任何想要的客户端连接,服务器级别的操作和逻辑应该定义在此类之中。

结构图中,中间层为数据处理层。它包含了一个工作者线程,此线程负责处理缓存中存储的网络数据包。网络通信中协议的处理是相当的重要,否则无法进行通信。框架接收的是二进制数据。因此,本层还要处理通信协议,将二进制数据转化成应用程序可以理解的请求。requestinfo是表示来自客户端请求的实体类。每个来自客户端的请求都能被实例化为requestinfo类型。requestinfo类型必须实现接口irequestinfo,该接口只有一个名为“key”的字符串类型的属性。

为了业务逻辑处理的方便,来自客户端的请求最终会被影射成命令。命令类需要实现icommand<tappsession,trequestinfo>:icommand这个框架中定义的接口。请求处理代码需置于icommand<tappsession,trequestinfo>接口的executecommand(tappsessionsession,trequestinforequestinfo)方法中,这个方法为框架中自定义的。icommand接口中只包含一个name属性,属性值用于匹配接收到请求实例(requestinfo)的key。当一个请求实例(requestinfo)被收到时,框架将会通过匹配请求实例(requestinfo)的key和命令的name的方法来查找用于处理该请求的命令。

辅助模块层包含一个重要的日志模块。当框架运行时,日志系统会自动启动。框架调用者不需要创建自己的日志工具,直接使用框架内置的日志功能。框架默认使用log4net作为第三方日志框架。框架使用者非常容易的使用和自定义框架的日志功能。框架允许自定义logger。如果想把业务操作日志保存到一个独立的地方,仅需要在log4net配置文件中添加一个新的logger并为这个logger设置相应的appender。

上述实施例为本发明较佳的实施方式,但本发明的实施方式并不受上述实施例的限制,其他的任何未背离本发明的精神实质与原理下所作的改变、修饰、替代、组合、简化,均应为等效的置换方式,都包含在本发明的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1