具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例对技术方案进行清楚、完整地描述。显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
实施例一:
为了解决上述技术问题,本申请提供了一种中间件通信系统,通过设计采用接单而同一的接口去处理通信,使得片间通信和IPC通信接口融合为一体,形成统一的中间件通信接口层,比现有技术中的通信库接口更加简化,开发成本更低。
在本实施例中,如附图1所示,所述中间件通信系统包括:任一服务端层和任一客户端层;其中,所述服务端层包括任意数量用于服务提供端的服务端,所述客户端层包括任意数量用于服务请求端的客户端;其中,所述服务端和客户端分别来自不同系统,或同一系统不同进程。所述中间件通信系统还包括:
中间件通信接口层;所述服务端层经过所述中间件通信接口层后与所述客户端层建立连接;所述中间件通信接口层用于不同系统之间的通信,以及同一系统不同进程之间的通信提供统一通信接口。
其中,通信过程中可以采用任意的通信协议来实现数据传输,如TCP协议或以太网方式等等,均不限于此。
需要说明的是,服务端层包含多个服务端,这些服务端可以是提供特定功能或服务的应用程序、服务或组件。这些服务端可以是来自不同系统的应用程序,例如一个运行在Windows操作系统上的服务端,与一个运行在Linux上的服务端进行通信。服务端也可以是同一系统中的不同进程,例如一个运行在主控制进程中的服务端,与运行在子进程中的服务端进行通信,均不限于此。
客户端层包含多个客户端,这些客户端是请求服务端的服务的应用程序、服务或组件。同理,客户端同样可以是来自不同系统的应用程序,也可以是同一系统中的不同进程。
例如,处于不同系统的客户端:假设车辆有一个基于Linux的底盘域控制器,它管理车辆的制动系统、悬挂系统和转向系统。同时,还有一个基于QNX的动力总成域控制器,它负责管理发动机、变速箱和车辆的电气系统。这两个域控制器作为服务端,提供特定的控制和监控服务。来自不同系统的客户端,如基于Android的信息娱乐系统或基于Windows的远程诊断工具,可以请求这些服务端提供的服务,如获取车辆状态信息、执行诊断测试等。
处于同一系统不同进程的客户端:在车辆的车身域控制器中,可能会有多个进程运行在同一台微控制器上。例如,一个进程负责监控车门和车窗的状态,而另一个进程负责监控车辆的灯光系统。当车门状态发生变化时,车门监控进程作为客户端,请求车身域控制器提供的服务,以更新车门状态信息,并将其传递给灯光监控进程。
本申请中间件通信系统提供了一个平台,使得不同系统或同一系统不同进程之间的服务通信变得更加简单、高效和可扩展,同时降低了开发和维护的复杂性;并且,其跨越不同系统和同一系统内的不同进程,提供服务请求和数据传输的能力,通过该方式,车辆内部域控制器的集成和通信变得更加灵活和高效。
其中,如附图2所示,所述中间件通信接口层至少包括:通信中间件管理单元、第一连接单元和第二连接单元;第一连接单元的一端与所述服务端连接,第一连接单元的另一端与通信中间件管理单元的一端连接,通信中间件管理单元的另一端与第二连接单元的一端连接,第二连接单元的另一端与所述客户端连接。
在本实施例中,中间件通信接口层相当于简化后的通信库。优选地,通信中间件管理单元可以通过IpcContext单元实现统一管理,在IpcContext单元中可以采用模板函数,即在实际使用过程中,通过模板函数,可以在不修改代码的情况下处理不同类型的数据。开发者可以创建可重用的通信逻辑,这些逻辑可以应用于不同的数据类型和通信模式。同时,模板函数可以确保在编译时检查数据类型的兼容性,减少运行时错误。
如果需要支持新的数据类型或通信模式,只需在IpcContext单元中添加新的模板函数实现,而不需要重复去修改代码;并且,模板函数提供了一个更高层次的抽象,使得开发者可以专注于业务逻辑,而不是底层的通信细节。
进一步地,如附图3所示,所述通信中间件管理单元包括:
注册模块,用于注册预设服务函数,生成可供客户端调用的接口。
优选地,注册模块可以包括funcName(函数名)、f(函数实体)和可选的nodeName(服务名称),均不限于此。
其中,函数实体f是一个模板参数,则本实施例可以注册任何类型的函数,而不需要为每种函数类型提供一个特定的注册方法。
IpcContext单元负责存储注册的服务函数及其相关信息,如函数名、函数指针、服务名称等,还负责处理客户端的调用请求,根据函数名找到对应的函数实体,并执行它。
例如,当开发者注册一个服务函数时,IpcContext单元会记录该函数的详细信息,并将函数指针存储起来。如果提供了一个服务名称时,那么该函数将被绑定到指定的服务名称。
当客户端通过指令调用一个服务时,它会传递函数名和参数。IpcContext单元根据函数名找到对应的函数实体,并执行它,将结果返回给客户端。
本实施例的注册模块能够注册任意类型的函数,无需为每种函数类型提供特定的注册方法。这简化了开发流程,开发者不再需要为不同的函数类型编写不同的注册代码。
在其他实施例中,开发者可以在一个进程中注册多个服务函数,这些函数可以通过IpcContext单元统一管理。这样的管理方式使得服务函数的注册、查找和执行更加高效和集中。另外,客户端在调用服务时,只需要知道函数名和参数,无需关心函数的具体实现位置。这简化了客户端的代码,使得客户端的调用更加直观和易于理解。
调用模块,用于根据输出自客户端的调用请求,匹配服务端与客户端的连接接口。
需要说明的是,当客户端发送一个调用请求时,调用模块会解析这个请求,提取函数名和参数。根据函数名,调用模块会查找注册在服务端的服务函数。如果找到匹配的服务函数,调用模块会构建一个调用上下文,并将参数传递给服务函数。最后,调用模块会处理服务函数的返回值,并将其返回给客户端。
在本实施例中,客户端可以通过调用模块方便地调用服务端的功能,而不需要知道服务端的具体实现细节。调用模块提供了一个抽象层,隐藏了服务端实现的复杂性,使得客户端调用更加简单和统一。
消息发布模块,用于接收来自服务端的数据信息,并根据所述数据信息生成目标信息。
需要说明的是,当服务端产生数据信息时,会通过消息发布模块来处理这些信息。消息发布模块会根据数据信息生成目标信息,该过程还可以包括数据的格式转换、过滤等,均不限于此。然后,消息发布模块会将目标信息发送给消息订阅模块。
在本实施例中,服务端可以灵活地发布数据信息,而不需要担心如何将其传递给客户端。消息发布模块确保了数据信息在发布之前已经经过了必要的处理,提高了数据的可靠性和一致性。
消息订阅模块,用于接收所述目标信息,并将其向所述客户端进行广播传递。
需要说明的是,消息订阅模块会监听来自消息发布模块的目标信息。当接收到目标信息时,消息订阅模块会将这些信息广播给所有订阅的客户端。客户端可以通过订阅特定的消息类型来接收感兴趣的数据。
在本实施例中,客户端可以动态地订阅感兴趣的消息类型,而不需要知道消息的具体内容。消息订阅模块实现了消息的广播机制,使得数据能够高效地分发给所有订阅的客户端。
异常监测模块,用于通过预设规则监测服务端与客户端之间的连接状态,输出异常指令。
需要说明的是,异常监测模块会根据预设规则监测服务端与客户端之间的连接状态。如果监测到异常,异常监测模块会输出异常指令,通知其他模块采取相应的措施。
优选地,预设规则可以采用心跳机制、断线重连机制,以实现检测连接是否正常,均不限于此。
在本实施例中,异常监测模块可以及时发现并报告系统中的潜在问题,提高了系统的健壮性和稳定性。通过预设规则,异常监测模块可以自动响应各种异常情况,减少了人工干预的需求。
异常处理模块,用于当接收到所述异常指令时,根据对应的预设机制进入异常处理模式。
需要说明的是,当接收到异常指令时,异常处理模块会根据预设机制进入异常处理模式。在异常处理模式下,异常处理模块会采取一系列措施来恢复系统状态或通知用户。
优选地,通过设置客户端和服务端断开连接时的回调函数,来实现应用程序在网络连接断开时及时响应,并采取相应的异常处理措施。
该异常处理模式可以统一管理所有客户端和服务端的断开连接回调函数。这意味着无论客户端还是服务端,其断开连接的回调函数都可以通过一个统一的接口进行设置和管理。
当会话连接断开时,对应的回调函数将被立即调用,应用层可以快速知道断开事件,从而可以采取及时的应对措施。异常事件触发后,则根据之前设置的回调函数和节点名称,调用相应的回调函数。回调函数可以执行任何应用程序特定的逻辑,如通知用户、记录日志、尝试重新连接等。
进一步地,在回调函数中,应用程序可以尝试恢复连接,如发送重连请求或重启服务。如果恢复连接失败,应用程序可以重定向到备用服务或采取其他容错措施。
在本实施例中,异常处理模块提供了一种自动化的机制来应对系统异常,减少了故障对系统的影响。通过预设机制,异常处理模块可以快速响应并处理各种异常情况,提高了系统的可靠性。
以及,加密设置模块,用于对在输出所述目标信息至所述第二连接单元之前,对所述目标信息设置预设加密属性。
需要说明的是,在目标信息传递到客户端之前,加密设置模块会对目标信息设置预设加密属性。这可以包括对数据进行加密、设置加密密钥或加密算法等,均不限于此。
在本实施例中,加密设置模块确保了数据在传输过程中的安全性和隐私性,防止数据被未授权的第三方截获或篡改。通过加密,加密设置模块增强了系统的安全性,保护了敏感数据不被泄露。
在本申请中,所述第一连接单元用于同步启动若干个所述服务端,以及传递所述数据信息,并向服务端输出来自客户端的服务请求;所述第二连接单元用于同步启动若干个所述客户端,以及传递所述服务请求,并向客户端输出所述目标信息。
需要说明的是,第一连接单元首先负责启动多个服务端。
它可以通过任意启动脚本或程序来确保所有服务端在系统启动时被同步启动。当服务端需要与客户端或其他服务端交换数据时,第一连接单元负责将这些数据信息传递给相应的目标。优选地,它还可以使用某种消息队列、共享内存或其他通信机制来实现这一点。
当客户端发送服务请求时,第一连接单元接收这些请求,并将其传递给适当的服务端,再通过负载均衡机制来决定将请求发送给哪个服务端。
在本实施例中,服务端可以被同步启动,确保系统在启动时所有服务端都已经就绪。
第一连接单元提供了服务端之间的数据传递和请求传递,使得服务端之间的通信更加高效和可靠。通过负载均衡机制,第一连接单元可以优化服务端的利用率,避免某些服务端过载。
进一步地,第二连接单元负责启动多个客户端,其也是可以通过任意启动脚本或程序来确保所有客户端在系统启动时被同步启动。当服务端需要将数据或响应传递给客户端时,第二连接单元负责接收这些信息,并将其传递给客户端。服务端处理客户端的请求后,会产生目标信息。第二连接单元将这些目标信息输出给客户端。
第二连接单元提供了客户端之间的数据传递和服务请求的传递,使得客户端之间的通信更加高效和可靠。通过第二连接单元,服务端可以将处理结果快速地传递给客户端,提高了客户端的响应速度和用户体验。
需要说明的是,第一和第二连接单元均是由IpcContext单元统一管理,而上层逻辑无需额外去管理这些服务,优选地,在该单元中可以通过一个hash表用来存储当前所有的服务端节点,通过高效的数据和服务请求的传递,提高了系统的整体性能和用户体验。
综上,本申请实施例中间件通信系统通过IpcContext单元进行统一的管理和处理,使得客户端调用变得更加简单和高效,其设计实现了高效、安全、灵活和可靠的通信机制,提高了系统的可维护性和可扩展性,同时也为开发者提供了更强的控制力和灵活性。
实施例二:
如附图4所示,为了解决上述技术问题,本申请还提出了一种中间件通信系统的方法,所述方法包括:
通过所述中间件通信接口层,根据预设规则为服务端与客户端提供统一的通信接口;其中,所述服务端与客户端分别来自不同系统,或同一系统不同进程。所述中间件通信接口层至少包括通信中间件管理中心。
需要说明的是,本实施例方法提供了中间件通信接口层为服务端和客户端提供了一套统一的通信接口。这套接口定义了服务端和客户端之间进行数据交换的标准格式和方法。通信中间件管理中心是中间件通信接口层的一部分,它负责管理和协调服务端与客户端之间的通信。管理中心维护了一个通信信息的传递状态,记录了数据信息和服务请求的流动情况。
进一步地,获取通信中间件管理中心中通信信息的传递状态;当所述传递状态指在所述通信中间件管理中心接收到任一服务端输出的数据信息时,通过所述通信接口向所述客户端输出目标信息;当所述传递状态指在所述通信中间件管理中心介接收到任一客户端输出的服务请求时,通过所述通信接口向所述服务端传递。
需要说明的是,当服务端输出数据信息时,通信中间件管理中心接收到这些信息。管理中心根据预设规则处理这些数据信息,并将其转换为目标信息。然后,通过通信接口将目标信息输出给客户端。
当客户端输出服务请求时,通信中间件管理中心接收到这些请求。管理中心根据预设规则处理这些请求,并将其转换为服务端可以理解的形式。然后,通过通信接口将服务请求传递给服务端。
优选地,可以通过对中间件系统的监控和数据跟踪来实现通信信息的传递状态的获取。例如,通信中间件管理中心可以设置一个状态机,用于跟踪数据包或消息的状态。状态机可以记录数据从发送到接收的每个阶段,如创建、发送、接收、处理等。通过查询状态机,可以获取当前的通信状态。
通信中间件还可以从记录详细的日志信息来获取所需信息传递状态,包括消息的发送和接收时间、发送和接收的节点、消息的ID、状态变化等。通过分析日志文件,可以了解通信中间件管理中心的当前状态,均不限于此。
其中,所述预设规则具体为:
通过所述服务端输出的数据信息注册预设服务函数,生成可供客户端调用的接口;根据所述输出自客户端的调用请求,匹配服务端与客户端之间的连接,以生成所述通信接口。
需要说明的是,预设规则涉及服务端输出的数据信息注册预设服务函数,以及根据客户端的调用请求匹配服务端和客户端之间的连接,生成通信接口。
服务端输出的数据信息首先需要被注册到一个预设的服务函数中。这个服务函数可以是预先定义好的,也可以是根据服务端输出数据信息动态生成的。注册过程可以是将数据信息映射到一个函数或方法上,以便后续可以通过该函数或方法来处理这些数据信息。
通过注册预设服务函数,可以为客户端生成一个可供调用的接口。这个接口可以是API、Web服务或其他形式的接口,它定义了客户端如何调用服务端的功能。生成的接口需要确保客户端可以通过该接口安全、高效地访问服务端的功能。
当客户端发起调用请求时,通信接口负责匹配这些请求到对应的服务端。匹配过程可以涉及负载均衡、服务发现或直接根据请求内容进行匹配。通过匹配,通信接口确保客户端的请求能够被正确地路由到服务端。
根据匹配的结果,通信接口会生成一个具体的通信路径,用于客户端和服务端之间的数据交换。这个通信接口定义了数据传输的格式、协议、安全措施等,确保通信过程的安全性和可靠性。
在本实施例中,通过预设服务函数的注册,服务端的功能被抽象化,使得客户端不需要关心服务端的具体实现细节。这简化了客户端的开发过程,客户端开发者可以更加专注于业务逻辑。另外,生成的客户端调用接口提供了灵活的服务访问方式,客户端可以根据需要调用不同的服务端功能。这种灵活性也使得系统更加易于扩展和维护。
综上,实施例二中间件通信方法通过提供了一个统一的通信接口,使得服务端和客户端可以跨系统或跨进程进行通信,无论它们运行在什么样的操作系统或进程环境中。通过预设规则,服务端输出的数据信息被注册到预设服务函数中,生成可供客户端调用的接口。这种服务注册与发现机制简化了客户端对服务端功能的访问。中间件通信方法可以根据客户端的调用请求,匹配服务端与客户端之间的连接,以生成通信接口。这种请求匹配与路由机制确保了客户端的请求能够高效、准确地路由到正确的服务端。具体的实现过程和原理在实施例一中已经详细介绍,在本实施例中不再赘述。
实施例三:
本申请还提供了一种车载终端,包括多个系统,其内包括若干进程;其中,所述多个系统间,以及所述进程间基于上述任一项所述的中间件通信方法进行通信。
需要说明的是,本实施例中的一种车载终端可以被划分为多个系统,每个系统负责不同的功能,如导航系统、娱乐系统、安全系统等。每个系统内部又包含若干进程,进程负责执行系统的具体任务。
在车载终端中集成上述任一项所述的中间件通信方法。这包括为每个系统提供统一的通信接口,以及实现服务注册、请求匹配、通信状态管理等功能。
各个系统之间以及进程之间基于中间件通信方法进行通信。通过通信接口,系统之间可以交换数据,进程之间可以传递服务请求。
其中,系统之间可以共享数据,如导航系统可以提供位置信息给娱乐系统,以便在导航时显示相关信息。进程之间可以传递控制命令,如安全系统中的进程可以发送安全警告给娱乐系统的进程,以调整显示内容。
中间件通信方法中的异常监测和处理机制可以应用于车载终端,确保系统在遇到异常情况时能够自动响应和恢复。
加密设置模块可以保护车载终端在传输敏感数据时的安全性,如用户个人信息、车辆状态等。
优选地,在一个现代车载终端中,多个系统之间可以通过中间件通信方法进行通信。导航系统提供位置信息和路线规划服务。它可以通过中间件通信方法与其他系统共享位置数据,如娱乐系统可以显示附近的餐厅或景点信息;娱乐系统负责提供音乐、视频等娱乐内容。它可以通过中间件通信方法接收来自导航系统的位置信息,以便在导航时提供相关的娱乐内容。
安全系统负责监测车辆的安全状态,如碰撞预警、车道偏离预警等。它可以通过中间件通信方法向其他系统发送安全警告,如娱乐系统可以暂停播放内容以提高驾驶员的注意力。
车载终端的多个系统和进程之间可以高效地进行数据交换和协同工作,提高了系统的整体性能和用户体验。基于中间件通信方法,车载终端的设计具有较高的灵活性和扩展性,可以轻松添加新的系统或进程,无需大规模修改现有系统。中间件通信方法中的安全机制确保了数据在传输过程中的安全性,保护了用户隐私和车载终端的安全。
通过中间件通信方法,车载终端可以高效地处理和传输大量数据,如高清地图数据、多媒体内容等。中间件通信方法的统一接口和模块化设计简化了车载终端的维护和升级过程,降低了维护成本。
综上,车载终端的多个系统和进程可以基于中间件通信方法高效、安全地进行通信,为用户提供一个集成、智能的驾驶体验。
实施例四:
本申请还提供了一种存储介质,为计算机可读存储介质中的一种,其上存储有计算机程序,所述计算机程序被处理器执行时,实现如上任一所述的中间件通信方法。
优选地,一种计算机可读的存储介质,如硬盘驱动器(HDD)、固态驱动器(SSD)、闪存卡、光盘等,在存储介质上存储实现中间件通信方法的计算机程序代码。
本实施例通过编写计算机程序,实现中间件通信方法中的各个功能,如服务注册、请求匹配、通信接口生成、状态管理等,以确保程序代码遵循相应的编程语言和开发标准。其中,将编写好的程序代码进行编译,生成可执行文件。将编译后的可执行文件和必要的库文件部署到存储介质上。将存储介质的设备连接到处理器所在的计算机系统。处理器读取存储介质上的可执行文件,并执行程序代码。
在本实施例中,当处理器执行计算机程序时,实现中间件通信方法的功能。程序通过处理器执行,与车载终端或其他系统的硬件和软件进行交互,实现通信过程。
通过执行存储介质上的程序,实现数据在服务端和客户端之间的传输,确保数据能够高效、安全地在系统之间交换。程序实现服务注册与发现功能,使得服务端的功能可以被客户端访问,而不需要关心服务端的具体实现细节。程序实现请求匹配与路由功能,确保客户端的请求能够高效、准确地路由到正确的服务端。
优选地,程序可以实现通信状态管理功能,监控和管理通信过程,确保通信过程的透明性和可控性。程序可以实现加密设置模块,保护数据在传输过程中的安全性和可靠性。程序可以实现服务函数的注册,使得系统能够灵活地添加新的服务,具有较高的可扩展性。程序还可以实现异常监测和处理功能,提高系统的健壮性和稳定性。
综上,本实施例的存储介质上的计算机程序通过执行实现了高效、安全、灵活和可靠的通信机制,有助于构建稳定、易用和安全的分布式系统。
所称处理器可以是中央处理单元(CPU),该处理器还可以是其他通用处理器、数字信号处理器(DSP)、专用集成电路(ASIC)、现成可编程门阵列(FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。所述存储器用于存储操作系统、应用程序、引导装载程序(BootLoader)、数据以及其他程序等,例如所述计算机程序的程序代码等。所述存储器还可以用于暂时地存储已经输出或者将要输出的数据。
在本申请所提供的几个实施例中,可以理解的是,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意的是,在有些作为替换的实现方式中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。
所述功能如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述的具体实施例,对本申请的目的、技术方案和有益效果进行了进一步的详细说明,应当理解,以上所述仅为本申请的具体实施例而已,并不用于限定本申请的保护范围。特别指出,对于本领域技术人员来说,凡在本申请的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。