成像系统和用于成像系统的多个节点之间的通信的通信平台的制作方法

文档序号:16051444发布日期:2018-11-24 11:19阅读:188来源:国知局

本发明总体上涉及一种成像系统,例如医学成像系统,更具体地说,涉及一种用于成像系统中的多个节点之间的通信的通信平台,并且结合对计算机断层摄影(ct)的具体应用加以描述;然而,下文也适用于其他成像系统,如mri(磁共振成像)、pet(正电子发射断层摄影)、pet-ct等。

背景技术

图1示出了传统的成像系统,例如wo2012/073167中描述的ct成像系统100。成像系统100包括固定机架102和旋转机架104,旋转机架104由固定机架102可旋转地支撑。旋转机架104围绕检查区域106绕着纵轴或z轴旋转。诸如卧榻之类的支撑件108将对象支撑在检查区域106中,并且可以用于在扫描之前、期间和/或之后相对于x,y和/或z轴定位对象。辐射源110(例如x射线管)由旋转机架104支撑并且与旋转机架104一起围绕检查区域106旋转,并且发射穿过检查区域106的辐射。源准直器112准直发射的辐射以产生穿过检查区域106的通常为扇形、楔形或圆锥形的辐射束。相隔检查区域106位于辐射源110的对面的辐射敏感探测器阵列114包括探测穿过检查区域106的辐射并生成指示其的投影数据的多个探测器像素。重建器116重建投影数据并生成指示检查区域106的体积图像数据。图像处理器118处理体积图像数据并生成指示探测到的辐射的一幅或多幅图像。显示器120用于呈现一幅或多幅图像。通用计算系统用作操作者控制台122,并且包括诸如显示器的输出设备和诸如键盘、鼠标等的输入设备。驻留在控制台122上的软件允许操作者控制系统100的操作,包括控制临床工作流程。控制系统用作机架主机124,并且通常部署在固定机架102内。机架主机124提供对各种部件的控制,包括控制支撑件108的移动,控制扫描流程,例如旋转机架104的旋转等。

最近,已经提出将更多的部件(例如各种平板)引入到成像系统中。

图2示出了诸如ct成像系统的成像系统200。与图1的成像系统100相比,除了控制台210和机架主机220之外,成像系统200还包括左面板210、右面板220和ct盒230。驻留在那些部件210-230上的软件可以允许操作者控制系统100的操作。每个部件可以具有其自己的操作系统(os),这些操作系统可以彼此不同并且可以与控制台210的os(例如微软windows)和机架主机220的os(例如linux)不同。例如,平板的os可以是安卓、ios、linux和微软windows等。

us2005/0232291a1公开了一种用于在将消息发送到包括消息验证程序的接收者程序之前验证消息排队软件环境中的消息的方法。

us9092282b1公开了一种用于监视在队列管理器上运行的通道的方法。可以随时监视在队列管理器上运行的通道实例的总数和每个命名通道的实例。



技术实现要素:

参考图2,为了实现成像系统200的多个节点(例如控制台210、机架主机220和各种节点230-250)之间的通信,可以部署通信网络以将所有这些节点相互连接。由于多个节点中的每个节点具有其自己的可能与其他节点的os不同的os,因此可能的解决方案可以是在网络层创建更多套接字连接,例如每对节点一个套接字连接,以实现它们之间的通信。然而,本发明的发明人已经认识到如图9所示的这样的解决方案有许多缺点。

每个节点包括网络层处的网络模块920和网络层之上的服务层处的一个或多个服务模块930-1、930-2。发送/接收队列应在网络层和服务层中的每层处实现,包括网络模块920处的队列923和每个服务模块930-1、930-2处的队列933。通常,多于一个线程用于处理不同类型的消息以获得高性能或不同类型的服务模块。每个服务模块930-1、930-2可以包括若干消息处理程序,并且不同的消息处理程序将处理不同类型的数据消息。对于不同的操作系统,服务模块的类型可以不同,因此源代码不能被重用。

调度器也相对简单。一个线程用于接收所有类型的消息。需要网络层处的一个交换机921将消息分派给服务层的不同服务模块,并且每个服务模块还需要另一个交换机932来一个接一个地解析感兴趣的消息。它不是那么实时,并且不能实现高性能。并且服务层必须创建和管理消息数据高速缓存/队列、线程,并且不能专注于其自己的任务,例如处理感兴趣的消息。如果将新类型的数据消息引入到成像系统200,则需要针对每个服务模块修改对应于服务模块930-1、930-2的源代码。如果存在多于一个节点,例如如图2所示的节点210-250,则对于与所有节点210-250的所有服务模块相对应的源代码将需要修改。

因此,提供用于成像系统中的多个节点之间的通信的改进的通信平台或架构将是有利的。

根据本发明的第一方面的实施例,提出了一种成像系统中的多个节点中的节点。成像系统包括用于成像系统中的多个节点之间的通信的网络。该节点包括:协议模块,其用于通过网络接收数据消息;网络模块,其用于从协议模块接收数据消息的数据字段;以及至少一个服务模块;其中,数据字段包括用于指示数据消息的类型的消息标识符和有效载荷字段;每个服务模块包括用于处理数据消息的有效载荷的至少一个消息处理程序;网络模块包括调度器、多个队列、回调模块和存储器,所述存储器用于存储消息标识符与多个队列之间的第一映射以及消息标识符与回调处理程序之间的第二映射,调度器被配置为基于消息标识符和第一映射将数据消息分派给多个队列中的一个,并且回调模块被配置为基于第二映射来处理多个队列中的每个队列中的数据消息,每个回调处理程序被引导到服务模块处的消息处理程序。

根据图9中的前述可能解决方案,一旦它已经接收到消息,网络模块的调度器就被配置为检查消息的类型,并且它确定其对于服务层处的一个或多个服务模块930-1、930-2中的每个服务模块而言是否是感兴趣的,如果消息对于服务模块而言是感兴趣的,则将消息分派给服务模块。通常,在网络层,为每个服务模块930-1、930-2创建队列923-1、923-2,并且针对一个服务模块的感兴趣的消息被推送到同一队列中,并且是通过服务层处的服务模块被拉入接收队列933中;然后,在服务层的每个服务模块930-1、930-2处,调度器被配置为一个接一个地解析接收队列933中的消息。

在所提出的解决方案中,在网络层以完全不同的方式分派消息,并且在服务层不需要如上所述的队列或数据高速缓存。网络层处的多个队列中的每个队列不专用于某个服务模块,相反,每个队列与一种或多种类型的数据消息相关联。网络模块的调度器被配置为基于数据消息的类型与多个队列之间的映射将数据消息分派给多个队列中的一个。在一个实施例中,可以根据其调度策略将所有类型的数据消息分派给不同的队列。例如,可以将要串行处理的数据消息的类型分派给一个队列,并且可以将要并行处理的数据消息的类型分派给另一个队列。在另一个实施例中,可以根据延迟要求将所有类型的数据消息分派给不同的队列。例如,可以将在几乎没有延迟的情况下处理的数据消息的类型分派给一个队列,并且可以将具有更多延迟容限的数据消息的类型分派给另一个队列。

此外,所提出的网络模块不是简单地将数据消息传递给服务层,而是回调模块可以基于消息标识符与回调处理程序之间的映射为每个数据消息直接提供回调处理程序,例如服务层处的消息处理程序的输入地址。因此,不需要在服务层排队任何数据消息,并且网络模块能够直接将数据消息递送到服务层处的对应消息处理程序。

如果向成像系统200引入新类型的数据消息,则不再需要所有节点的所有服务模块的所有交换机932和队列933过去所需的大量源代码修改工作,因为过去由服务层处的交换机932和队列933完成的工作现在由网络层完成。除了通过添加新类型的数据消息的相关映射对第一映射和第二映射的非常简单的配置修改之外,不需要修改网络层处的源代码。因此,当由于引入新的应用/服务或新节点而引入新类型的数据消息时,可以容易地扩展成像系统200。

可以预配置或动态配置第一映射和第二映射。

根据本发明的另一个实施例,网络模块还包括注册器,所述注册器被配置为从服务模块接收消息标识符、用于指示多个队列中的要被分派以具有消息标识符的数据消息的一个队列的队列标识值以及被引导到服务模块的用于处理具有消息标识符的数据消息的消息处理程序的回调处理程序,并且基于所接收的消息标识符(msgid)、所接收的队列标识值和所接收的回调处理程序来更新第一映射和第二映射。

以这种方式,即使不是每个服务模块都能建立与其他节点的连接,或者处理排队,它仍然能够通过通知网络模块每种类型的数据消息应被路由到或分派给哪个队列来灵活地设置或配置其感兴趣的消息应如何排队,此外,它还能够通过设置回调处理程序来为其每个感兴趣的消息灵活地配置消息处理程序。因此,可以轻松地将各种服务部署到网络中。客户端不需要创建与感兴趣的服务器的连接,也不需要处理任何数据消息的发送和/或接收;客户端只需要为感兴趣的消息注册其回调,并设置其感兴趣的消息应如何排队。例如,客户端可以通过将其感兴趣的消息分配给多个队列中的一个或多个来定制哪种类型的消息将被串行处理,哪种类型的消息将被并行处理,或者哪种类型的消息将在专用的非共享队列中处理。

根据本发明的另一个实施例,服务模块还被配置为生成消息标识符、用于指示多个队列中的要被分派以具有消息标识符的数据消息的一个队列的队列标识值以及被引导到服务模块的用于基于配置数据来处理具有消息标识符的数据消息的消息处理程序的回调处理程序。

根据本发明的另一个实施例,网络模块还包括注销器,所述注销器用于针对服务模块(530-1,...,530-n)接收消息标识符,并且基于所接收的消息标识符通过移除与所接收的消息标识符相对应的映射来更新第一映射和第二映射。

在服务模块不再对某种类型的消息感兴趣的情况下,服务模块可以通过将其消息标识符发送到网络模块的注销器来注销这种类型的消息。因此,服务模块可以动态地配置感兴趣的消息的类型。

根据本发明的另一个实施例,多个队列包括第一队列和第二队列,并且被分配给第一队列的线程的数量与被分配给第二队列的线程的数量不同。例如,可以为第一队列分配单个线程以实现对其中的消息的同步处理,而可以为第二队列分配更多线程以实现更高的吞吐量。

在一些实施例中,服务模块还被配置为向网络模块发送用于指示被分配给多个队列中的队列的线程的数量的值。

以这种方式,即使每个服务模块本身不执行数据消息的排队,服务模块仍然能够为网络模块处的队列配置线程的数量,以便定制队列中的数据消息的处理性能。例如,服务模块可以定制哪些类型的数据消息将由线程池的单个线程处理,或者由与一些其他类型的数据消息共享的线程处理。

可以在不同的调度策略中处理不同类型的数据消息。例如,对于用于携带位置反馈的某些类型的数据消息,仅需要处理最后的消息,而可以丢弃先前的消息,但是对于一些其他类型的数据消息,例如用于携带重要信号的数据消息,例如作为ecg信号,不丢弃任何数据消息。通过利用不同调度策略创建第一队列和第二队列,需要不同调度策略的数据消息可以在单独的队列中恰当地处理并且不会相互影响。

根据本发明的另一个实施例,一个或多个消息标识符被映射到多个队列中的一个。

以这种方式,不需要为每种类型的数据消息创建一个队列,但是一组选定类型的数据消息可以共享同一队列。

根据本发明的另一个实施例,网络模块被配置为向协议模块发送数据字段和节点标识符,节点标识符指示数据字段被发送到的一个或多个节点;并且协议模块被配置用于基于数据字段和节点标识符来生成数据消息。

以这种方式,在网络层发送数据消息被设计为是面向节点的,而不是面向连接的。传统上,在网络层发送数据消息是面向连接的。也就是说,在每对服务模块之间建立连接,并且在每对节点之间的网络层建立多个连接。因此,许多数据消息不必是同步的。在所提出的解决方案中,在网络层发送数据消息是面向节点的。因此,连接的复杂性对调用者是隐藏的。

根据本发明的另一个实施例,多个节点包括主节点和至少一个从节点;节点的协议模块包括连接模块和存储器;主节点的存储器被配置为存储一个或多个节点的连接信息;节点的连接信息包括节点标识、节点地址和节点的连接状态;主节点的连接模块被配置为从节点接收连接控制消息,连接控制消息包括:节点的节点地址,节点地址在网络中是唯一的并且是动态定义的;节点的节点标识符,节点标识符在网络中是唯一的;主节点的连接模块还被配置用于基于所接收的连接控制消息来更新连接信息,并且基于连接信息将连接表发送出去,连接表指示节点标识符与节点地址之间的映射。

在一些实施例中,从节点的连接模块被配置为发送连接控制消息;从节点的连接模块还被配置为从主节点接收连接表,并且基于连接表来建立到一个或多个节点中的每个节点的连接。

以这种方式,可以在没有预先固定每个节点的节点标识符和/或节点地址的情况下建立多个节点之间的连接。因此,添加和/或移除各个节点可以是灵活的,并且可以动态地配置节点地址。

在一个示例中,主节点是机架主机。在诸如ct系统或pet-ct系统的成像系统中,机架主机是必不可少的,因此适合用作主节点。在没有机架主机或机架主机可有可无的其他成像系统中,可以选择另一个节点用作主节点。例如,在mri系统中,可以选择用于梯度放大器和/或rf放大器的控制器用作主节点。

根据本发明的另一个实施例,主节点的协议模块还包括断开连接事件处理模块;主节点的连接模块还配置为在节点的连接状态基于所存储的连接信息变成断开连接时生成断开连接事件,并且将断开连接事件发送到断开连接事件处理模块;主节点的存储器还配置为存储断开连接事件与至少一个操作之间的第三映射;并且断开连接事件处理模块被配置为接收断开连接事件,并且响应于断开连接事件基于第三映射来执行至少一个操作。

以这种方式,主节点可以监视所有其他节点的连接状态,并且可以针对连接失败采取必要的操作。例如,当在例如用于移动支撑件的移动命令的运行期间发生连接失败时,立即停止这种移动以避免可能由移动引起的任何风险或危险。

根据本发明的另一个实施例,协议模块(510-m,510-s)是跨平台的。也就是说,协议模块适用于各种平台,包括安卓、ios、linux、微软windows等。例如,协议模块可以基于由谷歌提供的zeromq和协议缓冲区(pb)。换句话说,协议模块被配置为执行通过异构网络的通信。

根据本发明的第二方面的实施例,提出了一种成像系统,其包括多个上述节点,以及用于多个节点之间的通信的网络。

根据本发明的第三方面的实施例,提出了一种计算机产品,其包括计算机程序指令,所述计算机程序指令在被运行时执行通过网络在成像系统中的多个节点之间的通信的方法。该方法包括:在协议层,通过网络接收数据消息;在网络层,从协议模块(520)接收数据消息的数据字段,该数据字段包括用于指示消息的类型的消息标识符(msgid)和有效载荷字段;基于消息标识符(msgid)以及消息标识符与多个队列之间的第一映射将数据消息分派给多个队列中的一个;基于消息标识符(msgid)与回调处理程序之间的第二映射来处理多个队列中的每个队列中的数据消息,每个回调处理器被引导到服务层处的用于处理数据消息的有效载荷的消息处理程序;并且在服务层,处理数据消息的有效载荷。

参考结合附图进行的描述,本发明的其他目的和优点将变得更加明显并且可以容易地理解。

附图说明

下面结合实施例并参考附图更详细地描述和说明本发明,其中:

图1示出了传统的成像系统,例如ct成像系统;

图2示出了根据本发明的实施例的示例性成像系统,例如ct成像系统;

图3示出了根据本发明的实施例的用于成像系统的多个节点之间的通信的示例性软件架构;

图4示出了根据本发明的实施例的在协议层建立连接的示例性流程;

图5示出了根据本发明的实施例的节点的协议模块、网络模块和服务模块;

图6示出了根据本发明的实施例的主节点的示例性协议模块和从节点的示例性协议模块;

图7示出了根据本发明的实施例的示例性网络模块和示例性协议模块的架构;

图8示出了根据本发明的实施例的包括至少一个服务模块的示例性服务层的架构;

图9示出了根据另一种可能的解决方案的节点的协议层、网络层和服务层;以及

图10示出了根据本发明的实施例的用于提供服务的示例性节点(诸如机架主机或控制台)的架构。

各图中相同的附图标记表示相似或对应的特征和/或功能。

具体实施方式

将参照特定实施例并参考某些附图来描述本发明,但是本发明不限于此,而是仅由权利要求限制。所描述的附图仅是示意性的而非限制性的。在附图中,为了说明的目的,一些元件的尺寸可能被夸大并且未按比例绘制。

图3示出了根据本发明的实施例的用于成像系统的多个节点之间的通信的示例性架构。参考图3,该架构包括通信基础310,用作多个节点之间的通信的基础。通信基础负责连接节点,发送、接收和分派消息。通信基础310可以包括有线或无线网络。通信基础310可以包括异构网络311。异构网络被定义为连接具有不同操作系统、不同协议和/或不同接入技术的计算机或其他设备的网络。该架构包括多个服务提供者320,其负责为驻留在各种节点中的应用提供服务。例如,多个服务提供者320可以包括会话管理器321、用于移动的imovement322、用于射束限制的ibl323、用于工作流的iworkflow324、虚拟部件325、硬件升级326、其他连接点327等中的一个或多个。该架构还包括多个应用330,每个应用在特定节点处运行以提供服务和/或用作用于访问服务的用户接口。多个应用330可以包括控制台331、机架主机332和诸如左面板333、右面板334和ct盒335的各种面板中的一个或多个。例如,控制台331可以提供服务,例如iworkflow324;机架主机332可以提供移动服务,例如imovement323和ibl325;左面板331和右面板332允许操作者访问诸如由控制台331和机架主机332提供的服务。多个应用330可以基于不同的操作系统,例如安卓、ios、linux和微软windows。在诸如ct系统的一些成像系统中,机架主机332是必不可少的,而其他应用330,例如左面板333、右面板334是任选的。

图5示出了根据本发明的实施例的节点500的协议模块510-m、510-s、网络模块520和至少一个服务模块530-1,...,530-n。图4示出了根据本发明的实施例的在协议层建立连接的示例性流程。图6示出了根据本发明的实施例的从节点610的协议模块612和网络模块614以及与主节点620的交互。

参考图5,每个节点500包括协议模块510-m或510-s(取决于它是否是主节点),网络模块520,以及一个或多个服务模块530-1到530-n。

主节点的协议模块510-m包括连接模块512-m和存储器516-m。从节点的协议模块510-s包括连接模块512-s和存储器516-s。

主节点的存储器516-m被配置为存储一个或多个节点的连接信息。节点的连接信息包括节点标识符、节点地址和节点的连接状态。节点标识符可以是节点的名称或用于唯一标识节点的任何值。节点地址可以是通过其可从通信网络访问节点的任何地址。在一个实施例中,用于存储节点的连接信息的数据结构“nodeinfo”可以包括ip地址“ipaddress”,任选地包括mac地址“mac”、节点标识符“roletype”、连接状态“isonline”,以及任选地时间戳“lasttime”,用于指示从节点接收最后一个连接控制消息的时间,如下所述:

主节点的连接模块512-m被配置为从节点接收连接控制消息。连接控制消息包括节点的节点地址和节点标识符。主节点的连接模块512-m被配置为基于所接收的连接控制消息来更新连接信息。主节点的连接模块512-m还被配置为基于连接信息来生成连接表,并且优选地以预定的时间间隔(例如,每3秒)将连接表发布到所有节点。在示例中,连接表可以指示所有在线节点的节点标识符与节点地址之间的映射。在另一示例中,连接表可以指示所有节点的节点标识符、节点地址和在线状态之间的映射。一旦其从主节点接收到连接表,每个从节点就能够通过使用其中的节点地址在其自身与连接表中的节点之间建立连接。另外,从节点还可以被配置为检查节点的在线状态,并且如果节点离线,则采取一个或多个预定动作。根据实施例,从节点的连接模块512-s被配置为发送连接控制消息。连接控制消息可以是周期性地(例如,每1秒)由从节点发送,以便及时通知主节点其状态,例如其节点地址的变化。从节点的连接模块512-s还被配置为从主节点接收连接表,并且基于连接表来建立到一个或多个节点中的每个节点的连接。从节点的存储器516-s可以被配置为存储其自己的节点标识符、其自己的节点地址和建立的连接。

在一些实施例中,主节点的协议模块510-m还可以包括断开连接事件处理模块514-m。主节点的连接模块512-m还被配置为在节点的连接状态基于所存储的连接信息变成断开连接时生成断开连接事件,并且将断开连接事件发送到断开连接事件处理模块514-m。主节点的存储器516-m还被配置为存储断开连接事件与至少一个操作之间的第三映射。断开连接事件处理模块514-m被配置为接收断开连接事件并且响应于断开连接事件基于第三映射来执行至少一个操作。

接下来,参考图4,描述了根据实施例的主节点410的协议模块、从节点420的协议模块以及它们之间的相互连接。

在步骤422中,从节点420将连接控制消息432发送到主节点410。一旦它已经从从节点420接收到连接控制消息432,主节点410就在步骤412中更新所存储的连接信息440。连接信息440可以被存储在哈希映射中。具体地,在步骤4120中,主节点410检查节点420是否存在于所存储的连接信息中。如果节点420不存在于所存储的连接信息440中,例如主节点410先前不知道的新节点,则主节点420可以在步骤4122中基于所接收的连接控制消息在所存储的哈希映射440中创建针对从节点410的新条目,包括存储来自连接控制消息432的节点的节点标识符、节点地址,以及任选地连接控制消息432的接收时间。如果节点420已经存在于所存储的连接信息(例如哈希映射440)中,那么主节点420可以在步骤4124中基于连接控制消息来更新针对节点420的条目,例如,如果存在改变则更新节点地址,并记录连接控制消息432的接收时间。一旦其从从节点接收到连接控制消息,主节点420就将从节点的状态设置为在线,例如,将isonline设置为真。

主节点410可以被配置为发布连接表434。连接表434可以包括针对所有在线节点的节点标识符和节点地址的第三映射。在接收到连接表434后,从节点420可以在步骤424中基于连接表来建立或重新建立一个或多个连接。具体地,在步骤4240中,从节点420可以检查其自身与在线节点之间的连接是否已经建立。如果不是,则从节点420可以基于该在线节点的节点标识符和节点地址在其自身与在线节点之间建立连接,例如,用于调用方法“nodeenter(nodeinfonode)”。当调用方法“nodeenter(nodeinfonode)”时,从节点的协议模块可以被配置为通过端口和服务配置建立连接。

参考图4,主节点410还可以被配置为在步骤414中监视每个节点的连接状态。在一个实施例中,主节点420可以将从节点的状态设置为离线,例如,如果在预定时间段内未从从节点接收到任何连接控制消息,则将设置isonline设置为假。一旦其在步骤4140中检测到节点的连接状态已经离线,主节点420就生成断开连接事件,并且在步骤4142中响应于断开连接事件而执行至少一个操作。例如,当从节点离线时,支撑件的移动可能是危险的,并且必须尽快停止。

另外,断开连接事件可以通过其他方式来生成,例如通过监视物理链路的状态。例如,zeromq网络监视器可以用于在步骤4144中检查套接字连接,以便充分利用网络空闲,并在检测到建立的连接断开连接时发送断开连接事件。

节点的协议模块510-m、510-s还被配置为通过网络发送和接收数据消息。在一些实施例中,节点的协议模块510-m、510-s可以被配置为通过以下两种方法中的一种发送数据消息,即“ireq()”和“ipub()”。方法“ireq()”用于发送需要响应的消息,而方法“ipub()”用于向一个或多个节点发送消息并且不需要响应。一旦已经接收到数据消息,协议层就将所接收的数据消息的数据字段递送到网络模块520,并且在一些实施例中,递送到网络模块520的调度器521。

根据本发明的实施例,协议模块510的接口定义如下:

返回参考图5,网络模块520包括调度器521、多个队列523、回调模块522和存储器524。存储器524存储消息标识符与多个队列之间的第一映射以及消息标识符msgid与回调处理程序之间的第二映射。调度器521被配置为基于消息标识符msgid和第一映射将数据消息分派给多个队列523中的一个,并且回调模块522被配置为基于第二映射来处理多个队列中的每个队列中的数据消息。每个回调处理程序被引导到服务模块处的消息处理程序。多个队列523可以在初始化期间创建和/或可以动态地创建。根据一些实施例,队列与消息标识符之间的映射可以是一对一的或一对多的,并且回调处理程序与消息标识符之间的映射是一对一的。

根据本发明的实施例,调度器521的伪代码可以被描述如下:

根据一些实施例,一个或多个消息标识符被映射到多个队列中的一个。换句话说,一种或多种类型的数据消息被分组在消息组中,并且同一消息组的数据消息被分派到同一队列。表1示出了示例性第一映射。在表1中示出了五个消息组,但是在其他实施例中可以根据需要定义更多或更少的消息组。

表1:msgid与队列之间的示例性第一映射

一个消息组“移动命令”用于携带移动命令的消息的类型,包括例如用于携带机架的目标倾斜角度的消息的类型,用于携带对象支撑件的目标水平位置和/或目标垂直位置的消息的类型等。此组中的所有消息都被分派给队列“movement_cmd”。一个消息组“位置反馈”用于携带位置反馈的消息的类型,包括例如用于携带机架104的当前位置的消息的类型,例如当前倾斜角度,用于携带对象支撑件108的当前位置的消息的类型等。该组中的所有消息都被分派给队列“movement_pf”。一个消息组“ecg数据”用于携带ecg数据的消息的类型。该组中的所有消息都被分派给队列“movement_ecg”。一个消息组“工作流程命令”用于携带工作流程命令的消息的类型,包括例如用于患者注册的消息的类型、用于取向选择的消息的类型、用于检查卡选择的消息的类型等。该组中的所有消息都被分派给队列“workflow_wf”。一个消息组“患者列表”用于携带患者列表的消息的类型。该组中的所有消息都被分派给队列“workflow_patientlist”。

不同的队列可以使用不同的调度策略、不同的排队/出队策略和/或不同数量的线程。在一个实施例中,对于队列“movement_pf”,队列中的消息应该是实时处理的。也就是说,回调模块522应调用对应的回调处理程序以实时处理消息。但是,由于最新消息携带最新位置反馈,因此只需要处理最新消息,同时可以丢弃先前消息。在一个实施例中,对于队列“movement_ecg”,队列中的消息一个接一个地被实时地处理,并且没有消息被丢弃,因为需要完整的ecg数据集。在一个示例中,要丢弃的消息由网络模块丢弃,或者,要丢弃的消息可以被传递到服务层或应用层,然后在那丢弃。在一个实施例中,对于队列“movement_ms”和队列“workflow_wf”中的每个,消息需要由单个线程以同步方式处理,以便避免消息之间的冲突。例如,如果在运行相同类型的移动命令时出现诸如水平移动对象支撑件的移动命令,则在前一命令完成之前不应执行后一命令。在一个实施例中,对于队列“workflow_patientlist”,消息应在单独的任务队列中处理而不与其他类型的消息共享,因为数据量很大并且需要相对长的时间来处理。

网络模块520还可以包括注册器525。注册器525被配置为从服务模块接收消息标识符msgid、用于指示多个队列中的具有消息标识符的数据消息要被路由到的一个队列的队列标识值以及被引导到用于处理具有消息标识符的数据消息的消息处理程序的回调处理程序,并且基于所接收的消息标识符、队列标识值和回调处理程序来更新第一映射和第二映射。具体地,可以在第一映射中创建新条目,以便在消息标识符与队列标识值之间创建映射,并且可以在第二映射中创建新条目,以便在消息标识符与回调处理程序之间创建映射。在可以动态创建多个队列523的一些实施例中,注册器单元525还可以被配置为检查具有所接收的队列名称的队列是否存在,如果不存在,则创建具有所接收的队列名称的队列。

根据本发明的实施例,注册器525的伪代码可以被描述如下:

在一些实施例中,注册器525还可以被配置为设置针对队列的线程池的数量。在一个示例中,如果队列中的数据消息可以(?)以同步方式处理,则针对队列的线程池的数量可以被设置为一。在另一个示例中,如果可以异步地处理队列中的数据消息,则可以将针对队列的线程池数设置为多于一个。在这种情况下,注册器525还被配置为从服务模块530接收用于指示被分配给队列的线程池的数量的值,例如通过以下方法:

voidregister(intmsgid,stringqueuename,intthreadnumber,inetbasiscallbackcallback);

网络模块520还可以包括注销器526。注销器526被配置为从服务模块接收消息标识符msgid,并且基于所接收的消息标识符来更新第一映射和第二映射。具体地,从第一映射和第二映射中移除与所接收的消息标识符相关的映射。通过调用注册器525,服务模块可以添加感兴趣的消息;通过调用注销器526,服务模块可以移除不再感兴趣的消息。因此,服务模块能够动态地修改其感兴趣的消息而无需改变任何源代码。

根据本发明的实施例,注销器526的伪代码可以被描述如下:

图7示出了根据本发明的实施例的示例性网络模块720和示例性协议模块710的架构。参考图7,在自下而上的方向上,网络模块720从较低层(即协议层710)接收消息,分派所接收的消息,然后传递所接收的消息以由较高层(即服务层)经由回调处理程序处理。在自上而下的方向上,网络模块700从较高层(即服务层)接收消息,即要被发送到其他节点的各种类型的消息,并将这些消息发送到协议层710。从服务层接收的消息可以包括用于各种服务的消息,例如isession,inetwork,pb(位置射束),bl(射束限制)。

根据本发明的实施例,网络模块的接口可以被定义如下:

返回参考图5,节点500可以包括至少一个服务模块530-1,...,530-n。每个服务模块包括用于处理数据消息的有效载荷的至少一个消息处理程序532。每个消息处理程序532可以由网络模块借助于对应的回调处理程序调用,该回调处理程序被引导到消息处理程序532的输入地址。

图8示出了根据本发明的实施例的包括至少一个服务模块的示例性服务层800的架构。图8中示出了两个服务模块,即用于工作流服务的一个服务模块810和用于移动服务的另一个服务模块820,但可以配置更多或更少的服务模块。根据一个实施例,服务模块可以通过安卓中的远程服务组件或微软windows中的com组件或任何其他合适的操作系统来实现。

在一些实施例中,服务模块可以被配置为处理单个服务的消息或处理多个服务的消息。例如,用于控制射束位置的服务和用于射束限制的服务都由相同的节点(即机架主机)提供,因此可以将这两个服务的消息设计为在一个服务模块处进行处理。

在一些实施例中,服务由一个节点提供或执行,但是可以由多于一个节点访问。例如,用于控制扫描流的服务由控制台提供,但是可以由诸如左面板、右面板和操作盒的不同节点访问。用于访问相同服务的不同节点的服务模块可以相同或不同。在一个实施例中,在用于访问相同服务的不同节点的服务模块中,消息id表可以是相同的,日期类型可以是相同的,但是用于处理相同类型的消息的消息处理程序可以是不同的。

服务模块的消息处理程序负责处理消息并将消息传递到上层,例如应用层。在一些实施例中,消息处理程序可以被配置为将一个消息传递到应用层处的多于一个应用。

图10示出了根据本发明的实施例的用于提供服务的示例性节点(诸如机架主机或控制台)的软件架构。所示的架构包括协议、网络和服务层1010以及应用层1020。应用层1020包括用于提供服务的业务平台1024,以及用于允许其他节点访问其提供的服务的插件1022。

在一些实施例中,多个节点中的一些节点被配置为提供服务(此后称为业务节点),例如控制台和机架主机。业务节点主要用作响应服务器和发布服务器。参考图10,对于业务节点,它主要经由接口“res()”接收消息,并经由接口“pub()”发送消息。响应服务器应该通过多工作模式实现;服务提供者将注册感兴趣的命令并并行处理它们。

参考图10,插件1022可以包括命令处理程序、状态机、一些状态表、状态监视器和数据发布者。

针对不同节点的状态表可以不同。例如,在提供移动控制服务的机架主机中,状态表可以包括针对移动轴的状态值、针对连接的状态值和/或针对位置反馈的状态值。例如,在提供工作流服务的控制台中,状态表可以包括针对扫描流的状态值。

监视器是一个线程,它将启动一个计时器以在预定时间间隔内(例如每3秒)将所有状态表更新到其从节点。在机架主机中,监视器可以进一步被配置为检查物理连接的在线状态,并在某个连接变成离线时停止正在进行的移动。在控制台中,监视器可以确保及时发布过程数据。

本文描述的技术过程可以通过各种手段来实现。例如,这些技术可以用硬件、软件或其组合来实现。对于硬件实现方式,处理单元可以在一个或多个专用集成电路(asic)、数字信号处理器(dsp)、数字信号处理设备(dspd)、可编程逻辑器件(pld)、现场可编程门阵列(fpga)、处理器、控制器、微控制器、微处理器、被设计为执行本文所描述的功能的其他电子单元或其组合内实现。关于软件,实现方式可以通过执行本文描述的功能的模块(例如,过程、函数等)来实现。软件代码可以被存储在存储器单元中并由处理器执行。

此外,所要求保护的主题的各方面可以使用标准编程和/或工程技术实现为方法、装置、系统或制品,以产生软件、固件、硬件或其任何组合以控制计算机或计算部件实现所要求保护的主题的各个方面。这里使用的术语“制品”旨在涵盖可从任何计算机可读设备、载体或介质访问的计算机程序。例如,计算机可读介质可以包括但不限于磁存储设备(例如,硬盘、软盘、磁条......)、光盘(例如,压缩盘(cd)、数字通用盘(dvd)...)、智能卡和闪存设备(例如,卡、棒、键驱动器...)。当然,本领域技术人员将认识到,在不脱离本文所描述的内容或精神的情况下,可以对该配置进行许多修改。

如在本申请中所使用的,术语“模块”,例如协议模块、网络模块、服务模块、回调模块、连接模块、断开连接事件处理模块、“调度器”、“队列”、“注册器”、“注销器”、“估计器”(例如“剪切波探测器”、“属性估计器”和“成像编码器”)旨在表示处理器或计算机相关实体,硬件、硬件和软件的组合、软件或运行中的软件,但特别地它们指的是软件或运行中的软件。例如,部件可以是但不限于在处理器上运行的进程、处理器、对象、可执行件、运行的线程、程序和/或计算机。举例来说,在服务器上运行的应用和服务器两者都可以是部件。一个或多个部件可以驻留在进程和/或运行的线程内,并且部件可以位于一个计算机上和/或分布在两个或更多个计算机之中。

以上描述的内容包括一个或多个实施例的示例。当然,出于描述前述实施例的目的,不可能描述部件或方法的每个可想到的组合,但是本领域普通技术人员可以认识到各种实施例的许多其他组合和置换是可能的。因此,所描述的实施例旨在涵盖落入所附权利要求的精神和范围内的所有这些改变、修改和变化。此外,在具体实施方式或权利要求中使用术语“包含”的范围内,该术语旨在以类似于术语“包括”的方式是包含性的,因为“包括”在权利要求中被采用时被解读为过渡词。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1