欢迎来到天天文库
浏览记录
ID:62004917
大小:538.92 KB
页数:10页
时间:2021-04-10
《邓嘉民:Socket开发框架之框架设计及分析.docx》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、文档邓嘉民:Socket开发框架之框架设计及分析 虽然在APP应用、Web应用、Winform应用等大趋势下,越来越多的企业趋向于这些应用系统开发,但是Socket的应用在某些场合是很必要的,如一些停车场终端设备的接入,农业或者水利、压力监测方面的设备数据采集等,以及常见的IM(即时通讯,如腾讯QQ、阿里旺旺等)的客户端,都可以采用Socket框架进行相关的数据采集和信息通讯用途的,Socket应用可以做为APP应用、Web应用和Winform应用的补充。 1、Socket应用场景 一般情况下,客户端和服务端进行Socke
2、t连接,需要进行数据的交换,也就是后台提供数据查询或者写入的相关操作,它们的应用场景也是在后台有一个应用数据库支持的,如下所示。 10/10文档 Socket服务器和客户端的通讯原理如下所示,客户端通过服务器地址和端口发起Socket连接,服务器在接收到Socket客户端的请求后,开辟一个新的Socket连接进行通讯管理,两方基于Socket协议进行数据的交互处理。 2、Socket框架设计思路 Socket开发是属于通信底层的开发,.NET本身也提供了非常丰富的类来实现Socket的开发工作,Socket框架应针对这
3、些基础功能进行了很好的封装处理,已达到统一、高效的使用。 要掌握或者了解Socket开发,必须了解下面所述的场景及知识。 TCP客户端,连接服务器端,进行数据通信 TCP服务器端,负责侦听客户端连接10/10文档 连接客户端的管理,如登陆,注销等,使用独立线程处理 数据接收管理,负责数据的接受,并处理队列的分发,使用独立线程处理,简单处理后叫给“数据处理线程” 数据处理线程,对特定的数据,采用独立的线程进行数据处理 数据的封包和解包,按照一定的协议进行数据的封装和解包 针对以上内容,可以封装以下功能的操作类作为
4、共用基类: BaseSocketClient,客户端基类,负责客户端的、断开、发送、接收等操作。 BaseSocketServer,TCP服务器管理基类,负责在独立的线程中侦听指定的端口,如果有客户端连接进来,则进行相应的处理。 BaseClientManager,连接客户端管理类,该类主要负责客户端登录超时处理,连接上来的客户端维护,经过登陆验证的客户端维护,客户端登陆验证接口,客户端发送数据处理等功能。 BaseReceiver,数据接收处理类,该基类是所有接受数据的处理类,负责维护数据的队列关系,并进一步进行处理
5、。 ThreadHandler,数据独立线程处理类,对每个不同类型的数据(不同的协议类型),可以用独立的线程进行处理,这里封装了一个基类,用于进行数据独立线程的处理。 1)Socket客户端基类 我们知道Socket通讯,分为了客户端和服务端,它们各自处理的事情是有所不同的,因此为了实现更好的代码重用,我们在这个基础上进行了不同的封10/10文档装。针对Socket客户端类,我们主要需要提供基础的Socket连接及断开、接收及发送、封包拆包等常规操作过程,因此我们封装了一个客户端基类BaseSocketClient。
6、但是为了基于不同的应用客户端,实现不同的业务沟通,我们可以在服务端接收处理不同的客户端,因此也就是需要对Socket客户端进行派生扩展,例如本框架增加了一个中心的Socket客户端、分店的Socket客户端、还有一个桥接的连接客户端(可实现转发数据功能)。 2)Socket服务端基类 相对于Socket客户端基类,同样我们也创建一个Socket服务端基类,通过继承的方式,我们可以用于简化代码的重复性。该服务端基类称为TCP服务器管理基类BaseSocketServer,负责在独立的线程中侦听指定的端口,如果有客户端连接进
7、来,则进行相应的处理。 同样我们也派生了两个服务端的基类,方便对不同的Socket客户端进行差异性处理,如对应上面的中心客户端类ClientOfCall,我们增加一个对应的服务端类ServerForCall,其他的也类似,它们的继承关系如下所示。10/10文档 另外,由于我们允许不同的Socket客户端类(如ClientOfCall、ClientOfShop)的接入,那么在服务器端也会有对应Socket服务端类(ServerForCall、ServerForShop)进行不同端口的侦听,一旦在自己所属端口有Socket接
8、入,那么服务端类会分派给不同Socket客户端管理类来处理他们的关系和数据,这样也就进一步引入一个客户端管理类的概念,它对应不同的Socket客户端。 这里也根据需要定义了一个Socket客户端管理基类BaseClientManager,这个T代表对应不同的客户端,这样我们
此文档下载收益归作者所有