具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
本发明实施例提供的实施方案如下:
请参阅图1至图4,本发明实施例提供了一种跨平台软总线的通信装置,所述装置包括:
通信线程单元101,用于维护双网相同业务端口的两个不同的连接;
线程池容器102,用于作为所述通信线程单元的管理容器;
数据队列缓存单元103,用于缓存接收的数据队列及发送的数据队列;
连接处理器104,用于预处理所述数据队列;
业务适配器105,用于归类所述双网相同业务端口的两个不同的连接及当一网段网络异常时协助网络切换。
本实施例中,通信线程单元101中,将通信线程分为两大类,三个小类,即TCP线程和UDP线程2个大类,TCP服务角色、TCP客户端角色和UDP线程3个小类。每个线程负责维护双网相同业务端口的两个不同的连接(TCP线程)。
本实施例中,线程池容器102,作为各种类型通信线程的管理容器,或称线程管理员。线程池容器102负责对通信线程如TCP线程和UDP线程进行创建、销毁、查询、调度、重用、回收等管理任务。线程池容器102也是软总线同其他软件模块的交互界面,其他模块使用软总线就是通过线程池容器102对外开放的接口来进行的。线程池容器102,将线程池分工作线程池和缓存线程池两个线程池;工作线程池即正在进行通信工作的线程容器,缓存线程池是备用线程容器;当有新的连接建立时,则将所述缓存线程池中的相应线程调度到所述工作线程池中,当有连接断开时,则释放所述工作线程中的相应线程,并将释放的线程回收为缓存线程,调度到所述缓存线程池中。
本实施例中,数据队列缓存单元103,作为每个连接待处理的数据缓存池,用于缓存接收数据队列和发送数据队列,数据队列缓存单元103与TCP发送缓冲和接收缓冲类似,通过缓存接收数据队列和发送数据队列,可确保在数据高峰的时候不会因暂时数据处理能力的不足对数据通信的影响或丢失数据。
本实施例中,连接处理器104,具体用于对数据队列进行维护、操作的数据预处理,也就是数据队列的直接管理者。
本实施例中,数据分为两种业务类型,当同第三方***通信时,采用不带报文头的数据类型,在内部***中采用带报文头的数据类型。在内部***中采用带报文头的数据类型有助于防止非法数据对***的干扰,保证连接的合法性,当有非法的连接时将会被断开。
本实施例中,业务适配器105是专门为支持双网通信而设置的。
所述通信线程单元采用ACE跨平台通信技术。
本实施例中,所述通信线程单元101包括对外提供接口的XPCOM组件。
本实施例中,所述装置还包括:
心跳检测单元,用于发送自定义心跳消息,当在预定时间内未收到响应消息或正常的通信数据包时,则重新建立连接或切换网络。
本实施例中,跨平台软总线的通信装置具体为C/C++语言下的跨平台软总线的通信装置。
本实施例的跨平台软总线的通信装置,采用ACE跨平台通信技术。利用ACE跨平台通信特性,针对ACE机制较复杂,熟练掌握、使用较难的特点,采用面向对象技术对其再封装,再次降低使用复杂性。
本实施例的跨平台软总线的通信装置,采用线程池。ACE不仅对跨平台通信socket编程进行了封装,还使得线程这个概念在各平台上进行了抽象,使得多线程的编程可以非常简单。即使在不支持线程的平台上也能够运行该多线程代码。对socket连接的管理采用线程池方式管理通信线程单元101同其他模块之间的通信通道,有了线程池容器102的管理,socket网络通信资源就能得到很好的管理,避免由于失误造成资源浪费的现象。
本实施例的跨平台软总线的通信装置,采用XPCOM跨平台组件技术。XPCOM是一个跨平台组件模型,它的全称为Cross Platform Component Object Module。XPCOM实现了一个框架(framework),这个框架中,它允许开发者打破单一整体的软件项目,而分解为多个更小的模块化碎片(pieces),这些碎片也即组件(components)。XPCOM组件对外提供接口,对于XPCOM接口,需要考虑2个因素:
(1)、接口与按照契约(Contract)编程:一个接口在组件与客户程序之间达成契约。并没有任何强制措施保证认同这个契约, 但是忽略它会是致命的。在基于组件的编程中, 组件保证它提供的接口是不变的。不同版本的组件都要提供同样的访问方法。这就与使用它的客户程序达成了一种契约. 从这种角度来说, 基于组件的编程通常也称为按照契约编程。
(2)接口与封装:组件边界之间的抽象对软件的可维护性与可重用性是至关重要的。
本实施例的跨平台软总线的通信装置,采用面向对象技术,利用面向对象的三个基本特征(封装、继承、多态)可以使软件实现易维护、高质量、高效率、易扩展的目的和好处。同时由于ACE和XPCOM也都采用的面向对象技术,所以软总线采用面向对象技术也可以使软总线从整体框架上看是一个面向对象技术的聚合体,实现结构清晰,代码整洁的效果。
本实施例的跨平台软总线的通信装置,支持双网技术。电力软件特别是监控软件,为了保证通信可靠性,通常采用双网架构。软总线支持双网就能保证程序模块在一个网段瘫痪的情况下无缝切换到另一个网段运行,不丢失数据包,从而保证通信可靠性。
本实施例的跨平台软总线的通信装置,利用心跳检测单元。可判断TCP连接是否稳定,在通道闲时发送自定义心跳,对方收到后马上回复心跳。如果在规定的时间段内未能收到对方的心跳信息或正常通信数据包,则判断该连接已经断掉,自动重新建立连接或切换网段。
本实施例的跨平台软总线的通信装置,采用双数据类型模式。一种数据类型作为***内部数据,带内部数据报文头(对内通信,支持双网);另一种数据类型作为同第三方通信数据格式(对外通信,不支持双网),不带数据报文头,这个在连接建立后确定。
本实施例的跨平台软总线的通信装置,可以应用于以下场景:电网调度自动化***主站***各服务模块之间的通信中间件;配电自动化***主站***各服务模块之间的通信中间件;变电站自动化***主站***各服务模块之间的通信中间件;集控站主站***各服务模块之间的通信中间件;其他监控***各服务模块之间的通信中间件。
本实施例的跨平台软总线的通信装置,可作为动态库和***软件一起部署到服务器或PC上,在***软件需要进行网络通信时,向软总线请求创建网络连接,即向软总线中的线程管理员请求调度线程并进行相应的连接处理。
本实施例提供的跨平台软总线的通信装置,采用组件技术、单元化技术和面向对象技术,以动态库的形态提供给开发人员和运行环境,从而实现解决电力软件单元化开发过程中对于通信功能的跨平台和重用要求问题的目的。跨平台技术保证软件能在混合平台环境下运行。
本实施例提供的跨平台软总线的通信装置,使用者只需要使用软件对外提供的接口就可以非常方便地进行网络编程,将通信容错处理等工作交给软总线内部处理,保证不会因通信原因引起健壮性降低。
本发明实施例还提供了一种软总线,所述软总线包括上述的装置。
图5示意了本实施例提供的软总线在软件架构中的部署位置,软总线作为动态库和***软件一起部署到服务器或PC上,在***软件需要进行网络通信时,向软总线请求创建网络连接,即向软总线中的线程管理员请求调度线程并进行相应的连接处理。
本发明的跨平台软总线的通信装置及软总线,通过通信线程单元、线程池容器、数据队列缓存单元、连接处理器、业务适配器,实现了通信方式的统一化,易于维护。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。