一种cms前置机与服务器的通讯方法

文档序号:7995634阅读:644来源:国知局
一种cms前置机与服务器的通讯方法
【专利摘要】本发明公开了一种CMS前置机与服务器的通讯方法包括:步骤1:在服务器端创建监听CMS前置机连接线程,判断是否有CMS前置机发起连接,是则执行步骤2,否则继续等待并继续监听;步骤2:创建IOCP工作线程,接受连接,将套接字关联在IOCP对象上;步骤3:判断CMS前置机是否发送数据,是则执行步骤4,否则执行步骤5;步骤4:创建接收数据处理线程并进行处理,跳转至步骤6;步骤5:创建扫描线程,负责在一定时间间隔查询所有CMS前置机连接是否与服务器进行过通信,否则断开无数据连接,重新发起连接,是则返回步骤5;步骤6:创建服务器端发送数据处理线程将配置和处理的结果数据发送到对应的CMS前置机。本方法提高CMS前置机的并行化接入数量,提高内存使用效率,提高服务器资源的利用率。
【专利说明】—种CMS前置机与服务器的通讯方法
【技术领域】
[0001]本发明涉及一种CMS前置机与服务器的通讯方法,尤其涉及一种用于风力发电领域的CMS前置机与服务器的通讯方法。
【背景技术】
[0002]当前,国内发展的风力发电机都是最近几年建设的新能源,在运营的过程中出现了一些急需解决的问题,对风力发电机的振动故障进行监测,对产生的故障进行实时的检测,提前预知故障,提前备件,制定维修计划,其中CMS(CMS Condition MonitoringSystem)前置机与服务器通信是实现这一目的必要条件。
[0003]要解决现场人员实时掌握风力发电机的健康状况,需要在每台风力发电机中安装CMS前置机来与中控室的服务器进行实时的通信。对于服务器来说,风场的风力发电机少的上百台,多的上千台,关键是如何设计一个有效的服务器端来满足CMS前置机的连接数量和流量使系统高效运行的要求。
[0004]现有技术主要存在以下技术缺点:
1.要设计一个高性能的服务器,关键是选择一种适合于要求的网络通信套接字I/O模型以及基于此模型建立一个高效的内存模型,线程模型。在网络通信方法中服务器端较为普遍的应用是,基于套接字I/o模型中最常见的select模型所采用的两种模式:串行化或者并行化。串行化模式仅适用一个线程等待接收客户端请求,当请求达到后,线程被唤醒处理请求,这种模式弊端在于无法同时处理多个客户端的连接请求,显然不符合服务器的设计要求。并行化模式则是用一个线程等待客户端连接,每当到来一个新的连接,该线程会创建一个新的工作线程去专门处理维护和新连接客户端的通信。并行化模式可以同时与多个客户端保持连接通信,但随着客户端数量的增加,工作线程也随之增加,过多的工作线程会导致大量额外的环境切换(context switching),效率反而降低。在服务器端采用这种设计模式,单线程下默认最大CMS前置机连接数为64个,多线程模式下无法突破1000的瓶颈,因此该模型也难以满足实际的运营要求。
[0005]2.由于客户端的数量巨大,在服务器端申请内存,系统需要根据算法在内存空闲表中查找一块空闲内存,释放内存时,系统可能需要合并空闲内存块,这些会产生额外的开销。在通信的过程中频繁的申请和释放内存会产生大量的内存碎片,从而降低程序的运行效率,还可能会造成内存泄露。
[0006]3.在客户端与服务器通信连接后,如长时间未进行数据交互,建立的socket连接不会主动断开,如果系统长时间运行,会占用一定的系统资源,造成浪费,还可能影响其他需要与服务器进行交互的客户端的连接。
[0007]4.为了能让一个应用程序高效的同时,管理数量众多的套接字,windows NT3.5引入了 10CP(I/0 Completion Port输入输出完成端口)模型,作为开发高性能服务器的最佳选择。IOCP模型是一种能够使多线程得到合理利用和管理的机制,其理论基础是:并行运行的线程数量必须设置上限。如此可有效的避免线程数量过多时因进行环境切换所造成的CPU浪费。

【发明内容】

[0008]本发明的目的是针对上述【背景技术】存在的缺陷,提供提供一种可避免线程数量过多时因进行环境切换所造成的CPU浪费,避免频繁分配释放内存导致的内存效率降低,最大化利用系统资源的CMS前置机与服务器的通讯方法。
[0009]为实现上述目的,本发明一种CMS前置机与服务器的通讯方法,包括:
步骤1:在服务器端创建监听CMS前置机连接线程,判断是否有CMS前置机发起连接,是则执行步骤2,否则继续等待并继续监听;
步骤2:创建IOCP工作线程,接受连接,将套接字关联在IOCP对象上;
步骤3:判断CMS前置机是否发送数据,是则执行步骤4,否则执行步骤5;
步骤4:创建接收数据处理线程并进行处理,跳转至步骤6 ;
步骤5:创建扫描线程,负责在一定时间间隔查询所有CMS前置机连接是否与服务器进行过通信,否则断开无数据连接,重新发起连接,是则返回步骤5 ;
步骤6:创建服务器端发送数据处理线程将配置和处理的结果数据发送到对应的CMS前置机。
[0010]综上所述,本发明一种CMS前置机与服务器的通讯方法提高CMS前置机的并行化接入数量,提高内存使用效率,提高服务器资源的利用率。
【专利附图】

【附图说明】
[0011]图1为本发明一种CMS前置机与服务器的通讯方法的简要流程示意图。
【具体实施方式】
[0012]为详细说明本发明的技术内容、构造特征、所达成目的及效果,以下兹例举实施例并配合附图详予说明。
[0013]请参阅图1,本发明一种CMS前置机与服务器的通讯方法,该方法是基于IOCP模型,提出了一种CMS前置机与服务器通信的设计模型,该模型能够满足数量众多的风电场的并发连接通信,并且CMS前置机的请求具有即时的处理响应,提高服务器的内存效率,最大合理化的利用服务器的资源。
[0014]服务器程序,主要使用IOCP模型,来满足众多的CMS前置机的并发请求。然而,由于IOCP本身是开发大型服务器的一种网络通信模型,在风力发电机中的CMS前置机与服务器通信中的模型中,不能完全按照IOCP模型实现服务器的方式来设计,基于此,本发明采取从CMS前端接收的数据和返回的结果请求投递到IOCP对象上处理,向CMS前置机发送的配置数据则直接发送不再投递。对于在一定时间内未与服务器进行交互地连接,进行处理,提高资源利用。
[0015]本发明一种CMS前置机与服务器的通讯方法设计了独立的线程协调工作来共同实现,分别是:
一个监听CMS前置机连接线程;
若干个IOCP工作线程(通常是CPU个数的两倍左右); 一个扫描线程;
一个接收数据处理线程;
一个发送数据处理线程。
[0016]具体的,所述监听CMS前置机连接线程具体的工作任务是:(一)创建IOCP对象,创建的对象就是被用来为大量接入的套接字管理其对应的I/O请求;(二)创建一个套接字,绑定在指定的端口上来循环监听接收CMS前置机的连接;(三)当新连接一个CMS前置机时,将新生产的套接字与创建的IOCP对象关联起来。
[0017]所述IOCP的工作线程的工作任务是:负责循环等待并接收所有关联在IOCP对象上的套接字完成的输入和输出事件。
[0018]所述扫描线程的工作任务是:每间隔一定的时间,扫描所有已经建立的连接是否进行过数据交互,如无则关闭连接,等待CMS前置机重新连接。
[0019]所述接收数据处理线程的工作任务是:从内存池中分配空间,将从IOCP工作线程中取的数据包进行解析,校验数据完整性,按照不同的消息类型进行处理。
[0020]所述发送数据处理线程的工作任务是:判断发送的数据类型,分别做出不同的发送请求,提高系统效率。
[0021]本发明中的一种用于CMS前置机与服务器的通信方法,包括以下步骤:
步骤1:在服务器端创建监听CMS前置机连接线程,判断是否有CMS前置机发起连接,是则执行步骤2,否则继续等待并继续监听;
步骤2:创建IOCP工作线程,接受连接,将套接字关联在IOCP对象上;
步骤3:判断CMS前置机是否发送数据,是则执行步骤4,否则执行步骤5;
步骤4:创建接收数据处理线程,并进行处理,跳转至步骤6 ;
步骤5:创建扫描线程,负责在一定时间间隔查询所有CMS前置机连接是否与服务器进行过通信,否则断开无数据连接,重新发起连接,是则返回步骤5 ;
步骤6:创建服务器端发送数据处理线程将配置和处理的结果数据发送到对应的CMS前置机。
[0022]所述步骤4中利用内存池技术对数据进行处理
所述步骤4中,接收数据处理线程的工作任务是:从内存池中分配空间,将从IOCP工作线程中取的数据包进行解析,校验数据完整性,按照不同的消息类型进行处理。
[0023]所述步骤5中,一定时间间隔为3?10分钟之间的任意时间间隔。具体实施例中,时间间隔为5分钟。
[0024]所述步骤6中,发送数据处理线程的工作任务是:判断发送的数据内型,分别做出不同的发送请求,提高系统效率。
[0025]具体实施中,可以采用以下步骤:
CMS前置机发起连接请求,服务器监听CMS前置机连接线程收到请求后,将相应的CMS前置机相关信息存入到内存池已经分配好的PSocketList中,并将返回的套接字存入到pSocketList内对应的PerHandleData指向的结构体当中。
[0026]调用CreateloCompletionPort函数,将返回的套接字关联到创建的IOCP对象上,同时将指定该套接字的指针PerHandleData也作为参数传入,以后若有完成通知到达时,此PerHandleData也会随通知一起收到,并且以pSocketList_>Per1Data所指向的结构体中的LPWSAOVERLAPPED为参数,首次投递WSARecv请求,实际的接收工作交由IOCP工作线程。
[0027]CMS前置机与服务器建立连接后,则会每隔5分钟扫描所有建立的连接是否在5分钟内有数据交互,若无数据,则关闭套接字,等待CMS前置机的重新建立连接。
[0028]当CMS前置机发来数据,系统完成WSARecv并将数据发送至IOCP对象。IOCP工作线程里的GetQueuedCompletionStatus函数会立即返回,将数据从Per1Data指向的结构体中的接收数据存储区取出数据交由接收数据处理线程处理。接着IOCP工作线程根据取出的数据类型继续投递WSARecv或者WSASend请求。等待接收或发送下一次的数据。
[0029]接收数据处理线程会解析出具体是那个CMS前置机发送来的具体数据类型信息,如果是请求的配置文件数据,接收数据处理线程会从PSocketList中找到对应的发往CMS前置机的套接字,直接调用send函数回复对应的配置文件。如果是采集振动的原始信号数据,接收数据线程会在已经申请好的内存池中对数据进行校验,通过后再按照自定义协议格式进行封装,处理数据。将处理结果投递到IOCP的WSASend中进行回复。
[0030]关键点:监听服务器线程,如果CMS前置机端发起连接,则创建IOCP工作线程,接受连接,将套接字关联在IOCP对象上,间隔5分钟扫描所以的连接是否进行过数据交互,如无则关闭连接,释放资源。如收到数据则放入已经申请好的内存池中,在根据不同的消息数据类型,做出不同的发送请求,返回数据。
[0031]综上所述,本发明一种CMS前置机与服务器的通讯方法提高CMS前置机的并行化接入数量,提高内存使用效率,提高服务器资源的利用率。
[0032]以上所述的技术方案仅为本发明一种CMS前置机与服务器的通讯方法的较佳实施例,任何在本发明一种CMS前置机与服务器的通讯方法基础上所作的等效变换或替换都包含在本专利的权利要求的范围之内。
【权利要求】
1.一种CMS前置机与服务器的通讯方法,包括: 步骤1:在服务器端创建监听CMS前置机连接线程,判断是否有CMS前置机发起连接,是则执行步骤2,否则继续等待并继续监听; 步骤2:创建IOCP工作线程,接受连接,将套接字关联在IOCP对象上; 步骤3:判断CMS前置机是否发送数据,是则执行步骤4,否则执行步骤5; 步骤4:创建接收数据处理线程并进行处理,跳转至步骤6 ; 步骤5:创建扫描线程,负责在一定时间间隔查询所有CMS前置机连接是否与服务器进行过通信,否则断开无数据连接,重新发起连接,是则返回步骤5 ; 步骤6:创建服务器端发送数据处理线程将配置和处理的结果数据发送到对应的CMS前置机。
2.根据权利要求1所述的一种CMS前置机与服务器的通讯方法,其特征在于:步骤4中利用内存池技术对数据进行处理。
3.根据权利要求2所述的一种CMS前置机与服务器的通讯方法,其特征在于:所述步骤4中,接收数据处理线程的工作任务是:从内存池中分配空间,将从IOCP工作线程中取的数据包进行解析,校验数据完整性,按照不同的消息类型进行处理。
4.根据权利要求1所述的一种CMS前置机与服务器的通讯方法,其特征在于:所述步骤5中,一定时间间隔为3?10分钟之间的任意时间间隔。
5.根据权利要求4所述的一种CMS前置机与服务器的通讯方法,其特征在于:时间间隔为5分钟。
6.根据权利要求1所述的一种CMS前置机与服务器的通讯方法,其特征在于:所述步骤6中,发送数据处理线程的工作任务是:判断发送的数据内型,分别做出不同的发送请求,提闻系统效率。
7.根据权利要求1所述的一种CMS前置机与服务器的通讯方法,其特征在于:调用CreateloCompletionPort函数,将返回的套接字关联到创建的IOCP对象上,同时将指定该套接字的指针PerHandleData也作为参数传入,以后若有完成通知到达时,此PerHandleData也会随通知一起收到,并且以pSocketList_>Per1Data所指向的结构体中的LPWSAOVERLAPPED为参数,首次投递WSARecv请求,实际的接收工作交由IOCP工作线程。
8.根据权利要求7所述的一种CMS前置机与服务器的通讯方法,其特征在于:当CMS前置机发来数据,系统完成WSARecv并将数据发送至IOCP对象;10CP工作线程里的GetQueuedCompIetionStatus函数会立即返回,将数据从Per1Data指向的结构体中的接收数据存储区取出数据交由接收数据处理线程处理;接着IOCP工作线程根据取出的数据类型继续投递WSARecv或者WSASend请求,等待接收或发送下一次的数据。
9.根据权利要求8所述的一种CMS前置机与服务器的通讯方法,其特征在于:接收数据处理线程会解析出具体是那个CMS前置机发送来的具体数据类型信息,如果是请求的配置文件数据,接收数据处理线程会从PSocketList中找到对应的发往CMS前置机的套接字,直接调用send函数回复对应的配置文件;如果是采集振动的原始信号数据,接收数据线程会在已经申请好的内存池中对数据进行校验,通过后再按照自定义协议格式进行封装,处理数据,将处理结果投递到IOCP的WSASend中进行回复。
【文档编号】H04L29/08GK103457926SQ201310017090
【公开日】2013年12月18日 申请日期:2013年1月17日 优先权日:2013年1月17日
【发明者】王小康 申请人:成都阜特科技股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1