Socket开发框架之框架设计及分析_第1页
Socket开发框架之框架设计及分析_第2页
Socket开发框架之框架设计及分析_第3页
Socket开发框架之框架设计及分析_第4页
Socket开发框架之框架设计及分析_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Socket开发框架之框架设计及分析虽然在APP应用、Web应用、Winform应用等大趋势下,越来越多的企业趋向于这些应用系统开发,但是Socket的应用在某些场合是很必要 的,如一些停车场终端设备的接入,农业或者水利、压力监测方面的设备数据采集等,以及常见的IM(即时通讯,如腾讯QQ、阿里旺旺等)的客户端,都可以采 用Socket框架进行相关的数据采集和信息通讯用途的,Socket应用可以做为APP应用、Web应用和Winform应用的补充。1、Socket应用场景一般情况下,客户端和服务端进行Socket连接,需要进行数据的交换,也就是后台提供数据查询或者写入的相关操作,它们的应用场景也

2、是在后台有一个应用数据库支持的,如下所示。Socket服务器和客户端的通讯原理如下所示,客户端通过服务器地址和端口发起Socket连接,服务器在接收到Socket客户端的请求后,开辟一个新的Socket连接进行通讯管理,两方基于Socket协议进行数据的交互处理。2、Socket框架设计思路Socket开发是属于通信底层的开发,.NET本身也提供了非常丰富的类来实现Socket的开发工作,Socket框架应针对这些基础功能进行了很好的封装处理,已达到统一、高效的使用。要掌握或者了解Socket开发,必须了解下面所述的场景及知识。 TCP客户端,连接服务器端,进行数据通信 TCP服务器端,负责侦

3、听客户端连接 连接客户端的管理,如登陆,注销等,使用独立线程处理 数据接收管理,负责数据的接受,并处理队列的分发,使用独立线程处理,简单处理后叫给“数据处理线程” 数据处理线程,对特定的数据,采用独立的线程进行数据处理 数据的封包和解包,按照一定的协议进行数据的封装和解包针对以上内容,可以封装以下功能的操作类作为共用基类: BaseSocketClient,客户端基类,负责客户端的链接、断开、发送、接收等操作。 BaseSocketServer,TCP服务器管理基类,负责在独立的线程中侦听指定的端口,如果有客户端连接进来,则进行相应的处理。 BaseClientManager,连接客户端管理类

4、,该类主要负责客户端登录超时处理,连接上来的客户端维护,经过登陆验证的客户端维护,客户端登陆验证接口,客户端发送数据处理等功能。 BaseReceiver,数据接收处理类,该基类是所有接受数据的处理类,负责维护数据的队列关系,并进一步进行处理。 ThreadHandler,数据独立线程处理类,对每个不同类型的数据(不同的协议类型),可以用独立的线程进行处理,这里封装了一个基类,用于进行数据独立线程的处理。1)Socket客户端基类我们知道Socket通讯,分为了客户端和服务端,它们各自处理的事情是有所不同的,因此为了实现更好的代码重用,我们在这个基础上进行了不同的封 装。针对Socket客户端

5、类,我们主要需要提供基础的Socket连接及断开、接收及发送、封包拆包等常规操作过程,因此我们封装了一个客户端基类 BaseSocketClient。但是为了基于不同的应用客户端,实现不同的业务沟通,我们可以在服务端接收处理不同的客户端,因此也就是需要对Socket客户端进行派生扩展,例如本框架增加了一个中心的Socket客户端、分店的Socket客户端、还有一个桥接的连接客户端(可实现转发数据功能)。2)Socket服务端基类相对于Socket客户端基类,同样我们也创建一个Socket服务端基类,通过继承的方式,我们可以用于简化代码的重复性。该服务端基类称为 TCP服务器管理基类 BaseS

6、ocketServer,负责在独立的线程中侦听指定的端口,如果有客户端连接进来,则进行相应的处理。同样我们也派生了两个服务端的基类,方便对不同的Socket客户端进行差异性处理,如对应上面的中心客户端类ClientOfCall,我们增加一个对应的服务端类ServerForCall,其他的也类似,它们的继承关系如下所示。另外,由于我们允许不同的Socket客户端类(如ClientOfCall、ClientOfShop)的接入,那么在服务器端也会有对应 Socket服务端类(ServerForCall、ServerForShop)进行不同端口的侦听,一旦在自己所属端口有Socket接入,那么服务

7、端类会分派给不同Socket客户端管理类来处理他们的关系和数据,这样也就进一步引入一个客户端管理类的概念,它对应不同的Socket客户端。这里也根据需要定义了一个Socket客户端管理基类BaseClientManager,这个T代 表对应不同的客户端,这样我们就可以派生出CallClientManager和ShopClientManager两个不同的客户端管理类了,它们的继 承关系如下所示。3)数据接收处理基类在不同的Socket客户端连接到服务端后,服务端开辟一个新的线程进行对应的Socket数据通讯,那么数据通讯这里面的管理,我们可以为不同的Socket客户端订做一个对应的数据接收处理类

8、,专门针对特定的Socket客户端连接的数据进行处理。这里也根据需要定义了一个数据接收的基类BaseReceiver,同样我们派生对应不同客户端的数据接收类ReceivedForCall、ReceivedForShop和ReceivedForBridge等几个具体的数据处理类,它们的继承关系如下所示。3、框架界面设计1)参数配置Socket服务器需要一些参数来确定侦听的IP地址、端口,以及数据库的连接信息,各种数据的处理时间间隔等参数,因此需要提供一个较好的管理界面来进行管理,本框架使用基于本地配置文件的参数管理方式进行管理,参数界面如下所示。客户端也同样需要配置一些参数,用来确定连接的服务器

9、IP及端口信息,如下配置界面所示。Socket服务器监控界面,需要显示一些基础的状态和Socket连接等基础信息,作为我们对整体状态的了解,同时这些信息可以记录到日志里面供我们进行查阅和分析。除了上面总体的设计外,其中还有一个地方需要细致的展开来介绍,就是对Socket传输消息的封装和拆包,一般的Socket应用,多数采用基于顺 序位置和字节长度的方式来确定相关的内容,这些处理对我们分析复杂的协议内容,简直是一场灾难,协议位置一旦变化或者需要特殊的处理,就是很容易出错的, 而且大多数代码充斥着很多位置的数值变量,分析和理解都是非常不便的。如果对于整体的内容,使用一种比较灵活的消息格式,如JSON格式,那么我们可以很好的把消息封装和消息拆包解析两个部分,交给第三方的JSON解 析器来进行,我们只需要关注具体的消息处理逻辑就可以了,而且对于协议的扩展,就如JSON一样,可以自由灵活,这样瞬间,整个世界都会很清静了。由于篇 幅的原因,我将在下一个随笔在进行介绍JSON格式的消息处理过程。除了上面的场景外,我们还需要考虑用户消息的加密和校验等内容处理,这样才能达到安全、完整的消息处理,我们可以采用 RSA公钥密码系统。平台通过发送平台RSA公钥消息向终端告知自己的RSA公钥,终端回复终端RSA公钥消息,反之亦然。这样平台和终端的消息,就可以 通

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论