首页 > 代码库 > sylixos下DBUS替换方案

sylixos下DBUS替换方案

1.1 SylixOS下替换原理

    上一篇博客中介绍了DBUS通信原理以及常用函数接口,本文档介绍SylixOS下DBUS功能替换方案。

    SylixOS有多种进程间通信方法,可以实现类DBUS的进程间通信功能。根据DBUS通信原理,SylixOS下可设计替换方案如图 11所示。

    替换方案需先创建一个后台进程,负责接收进程发送的消息,根据消息类型进行处理。若接收的消息是信号类型,则依次转发至其他进程,若消息类型是函数调用类型,则转发至目标进程,等待函数调用的返回值。替换方案中进程间通信通过UDP通信实现,通过后台进程的转发,可以实现DBUS函数调用以及信号广播的功能,不同进程用不同的端口号区分。

    如图 1-1所示,替换方案中后台进程功能类似于DBUS中的总线功能,UDP通信替代域套接字,由此实现类DBUS的进程间通信功能。

技术分享

图 1-1替换方案

      替换方案中消息类型可分为:

     1. 请求连接消息

     2. 断开连接消息

     3. 信号消息

     4. 函数调用消息

     5. 函数返回值消息

     6. 函数注册消息

     7. 错误消息

     替换方案中需实现类DBUS功能,其中包括:

    1. 进程请求连接到后台进程以及断开连接

    2. 信号发送

    3. 信号接收

    4. 函数调用

    5. 等待函数调用

    6. 提供函数调用

2. 技术实现

2.1 连接到后台进程

     进程间通信前需连接到后台进程,SylixOS实现替换方案中,需要通信进程构造消息,向后台进程发送请求连接类型的消息。

     如图 2-1所示,后台进程判定消息为请求连接消息时,把该进程端口号加入到进程管理链表中。程序执行结束时,进程需要断开和后台进程的连接,送请求断开连接的消息至后台进程,后台进程把该进程对应的端口号从管理链表中删除。

技术分享

图 2-1请求连接、断开

2.2 信号发送

    DBUS中信号可以实现一种广播的机制,进程发送信号前需构造信号类型消息,然后发送至后台进程,且不需要等待响应消息。

    SylixOS下实现信号发送流程如图 2-2所示,构造信号类型消息,通过UDP发送至后台进程。

技术分享

图 2-2信号发送

2.3 信号接收

    当后台进程接收到信号类型的消息时,遍历所有已经连接到后台的进程,依次转发信号,实现信号的广播功能。

    已经连接到后台的进程需告知自己感兴趣的信号,然后等待消息,信号接收流程图 2-3所示。

技术分享

图 2-3信号接收

2.4 函数调用

     函数调用同信号类似,进程调用函数前需构造消息,消息包括函数名、函数参数以及本进程端口号。然后发送消息至后台进程,阻塞等待函数执行的返回值,流程图 2-4所示。

技术分享

图 2-4函数调用

     后台进程接收到函数调用类型的消息时,先检查该调用函数是否存在,函数存在则转发该消息至对应提供函数的进程,等待执行结果。若检查该调用函数不存在,则返回错误消息到调用函数的进程。后台进程处理流程图 2-5所示。

技术分享

图 2-5后台处理函数调用

2.5 等待函数调用

     等待函数调用,需等待调用消息。接收到后台进程转发的函数调用消息时,解析消息中的参数,然后执行函数,构造返回消息发送至后台进程,执行流程图 2-6所示。

技术分享

图 2-6等待函数调用

2.6 提供函数调用

    提供函数调用的进程需要把函数注册到后台进程,当其他进程调用函数时,后台进程会检查该函数是否存在,若存在则发送消息至目标进程,否则回复错误消息,执行流程图 2-7所示。后台进程接收到该消息,把函数添加到管理链表中。

技术分享

图 2-7提供函数调用

3.小结

    DBUS是一种高效、易用的进程间通信方式。本文档介绍了DBUS的通信原理,以及SylixOS下替换该通信机制的实现方案。本文以信号收发和函数调用模块为框架,介绍了SylixOS下替换DBUS功能具体实现步骤。


sylixos下DBUS替换方案