CN1650566A - 在发布-订单网络中通过有效载荷检查和订单处理的包路由 - Google Patents

在发布-订单网络中通过有效载荷检查和订单处理的包路由 Download PDF

Info

Publication number
CN1650566A
CN1650566A CNA028184483A CN02818448A CN1650566A CN 1650566 A CN1650566 A CN 1650566A CN A028184483 A CNA028184483 A CN A028184483A CN 02818448 A CN02818448 A CN 02818448A CN 1650566 A CN1650566 A CN 1650566A
Authority
CN
China
Prior art keywords
order
channel
network
attribute
message
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CNA028184483A
Other languages
English (en)
Other versions
CN100438398C (zh
Inventor
T-W·陈
A·W·方
P-F·杨
Y·黄
C-M·林
S·亚尼可
C-Y·王
D·S·罗森布劳
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
PreCache Inc
Original Assignee
PreCache Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Priority claimed from US10/199,368 external-priority patent/US7545805B2/en
Priority claimed from US10/199,369 external-priority patent/US6910033B2/en
Priority claimed from US10/199,439 external-priority patent/US7117270B2/en
Priority claimed from US10/199,356 external-priority patent/US20030165139A1/en
Priority claimed from US10/199,388 external-priority patent/US7411954B2/en
Application filed by PreCache Inc filed Critical PreCache Inc
Publication of CN1650566A publication Critical patent/CN1650566A/zh
Application granted granted Critical
Publication of CN100438398C publication Critical patent/CN100438398C/zh
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L45/00Routing or path finding of packets in data switching networks
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L45/00Routing or path finding of packets in data switching networks
    • H04L45/56Routing software
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L45/00Routing or path finding of packets in data switching networks
    • H04L45/302Route determination based on requested QoS
    • H04L45/306Route determination based on the nature of the carried application
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L45/00Routing or path finding of packets in data switching networks
    • H04L45/302Route determination based on requested QoS
    • H04L45/308Route determination based on user's profile, e.g. premium users
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L47/00Traffic control in data switching networks
    • H04L47/10Flow control; Congestion control
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/50Network services
    • H04L67/60Scheduling or organising the servicing of application requests, e.g. requests for application data transmissions using the analysis and optimisation of the required network resources
    • H04L67/63Routing a service request depending on the request content or context

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)

Abstract

一个包过滤器(10)网络(图1),过滤包并且结束包(10)。

Description

在发布-订单网络中通过有效载荷检查和订单处理的包路由
相关的参考申请
本申请与下列申请相关,所有这些申请在这里由参考文献合为一体,至少可以阐述为:U.S.临时申请号60/312,074,名称为“经由有效载荷检查的包路由”,申请于2001年8月15日;U.S.临时申请序列号60/312,077,名称为“使用频道的路由器中基于内容的路由和过滤的方法和设备”,申请于2001年8月15日;U.S.临时申请序列号60/312,076,名称为“在网络上发送和接收布尔函数的方法”,申请于2001年8月15日;U.S.临时申请序列号60/312,075,名称为“在网络上存储布尔函数用来赋值、修改、重用和发送的方法”,申请于2001年8月15日;U.S.临时申请序列号60/329,526,名称为“基于内容的路由中可变大小域上通配符匹配的有效实现”,申请于2001年10月17日。
技术领域
本发明涉及在一个基于包载荷检查的网络核心中路由包的方法和设备,以及在一个发布-订单网络(publish-subscribe network)中处理订单的方法和设备。
背景技术
网络带宽正呈指数增长。然而,网络基础设施(包括路由器、服务器、后台程序、协议等等)仍然使用相对老旧的技术。作为结果,Internet应用和网络路由器不能跟上带宽发展的速度。同时,越来越多的设备和应用变得网上可用。这些设备和应用在网络节点上的负载增长得非常可怕。网络负载和应用数量的增加也使得网络应用实现和维护的复杂性变得更高。作为结果,网络带宽的增长和网络设备及应用的随处使用会导致在旧有网络基础设施中的数据路由和传输问题,特别是在发布内容给下订单者时。
一个可以从服务端向客户端推动信息的网络模型是发布-订单模型。在所述模型里,服务器成为信息的简单发布者,而不需要考虑哪一个客户端可能会对这些信息感兴趣,或者这些信息在网络中位于哪儿。随着信息变得可用被发布出来,客户端变成信息的下订单者,而不用再考虑信息在网络的何处被发布的细节。然后,所述网络负责把发布信息有效地路由到下订单者,通过匹配信息以激活订单,并且以一种对发布者和下订单者都透明的方式做所有这些工作。
因为在发布-订单模型中服务器的复杂度极大地降低,所以重量级的服务器和轻量级的客户端间的差异开始消失,或者甚至可以合并成一个同等端的概念,既可以是发布者,也可以是下订单者,或者两者都是。大多类型的应用在端与端之间做发布-订单类型的交互时有一个自然的密切关系。在许多这些应用之下的通常的主题是被发布和订单的信息采用事件的形式。例如,一个投资者买或卖一只股票,导致这只股票价格产生变化。一起交通事故发生在高速公路上,导致高速路上的交通发生拥堵。一个软件系统中的一个软件漏洞被发现,导致一个补丁需要开发提供给该软件的用户。在一个Internet游戏中一个玩家开火,导致另一个玩家的化身死掉。所有这些例子都是事件,对大多数下订单者来说可能有兴趣,并且能够在网络上传播,通报那些下订单者这些事件发生了。这样,一个事件仅仅是在某个时间、某个地点发生在网络上的可能有兴趣的独立的、简洁的信息。
另一个例子涉及预定的广播,这和只包含异步事件的应用具有不同的特征,异步事件是指事件的时间是不可预测的和随机的。首先,所述事件在一个大家都知道的时间预定发生。然后,一个事件不需要成为压缩的信息。相反的,它可以是大规模的数据。指明这些大负载数据到发现有兴趣的下订单者的网络部分需要服务器的实质工作。
通常,在发布-订单模型里,所述服务器或发布者为网络执行路由决定,以便指示网络往哪儿发送发布的内容。发布者存储其发布内容的订单。当收到或生成新的内容时,所述发布者把内容和每一个订单进行比较以确定匹配。如果内容(事件)满足某个订单,发布者经由网络把内容推给相应的下订单者。这种传统的发布-订单模型给发布者带来沉重的负担,特别是当更多的设备变得网络可用以及下订单者的数量增加时。一个补充的方法是十分糟糕的—下订单者在所有发布事件上评估自己的订单。
随着Internet上集中了越来越多数不清的应用,使用事件通知的可能性变得无止境。然而,那些可能性需要更有效的方法进行路由决定,并且决定何时事件满足订单,以缓和发布者的负担。这样,普遍深入的、持久稳固的事件通知服务能给Internet应用和其他应用及其实现提供巨大的增值利益。
发明内容
和本发明相一致的第一种方法和设备提供网络中的包处理。一个收到的包有一个头字段和一个有效载荷(payload)字段。所述包的有效载荷字段在网络核心进行检查以决定怎样处理该包,并且所述包基于检查结果被有选择的进行处理。
和本发明相一致的第二种方法和设备提供频道配置以利于基于内容的路由。所述频道在发布-订单网络中的多个节点间提供一个逻辑通讯路径。所述频道被设定为在所述通讯路径上进行信息的基于内容的路由,并且选择一种消息格式在基于所述频道的所述通讯路径上传输。
和本发明相一致的第三种方法和设备在一个发布-订单网络中提供传输判定(predicates)。一个收到的表达式包括与一个订单相关的布尔值判定。所述表达式被编码成一个消息在所述网络中传输,用于基于内容的路由,并且为了给订单提供基于内容的路由,所述消息被传输到网络核心中的至少一个路由器。
和本发明相一致的第四种方法和设备为一个发布-订单网络提供订单存储。一个在所述网络中存储一个订单的结构被详细说明。所述结构被分成多个子表达式,并且这些子表达式用于共同指明一个特殊的订单。一个布尔值判定和所述特殊订单的子表达式当中的至少一个相关联,并且所述布尔值判定为了给所述订单提供基于内容的路由,为所述特殊订单指出通知元素。
和本发明相一致的第五种方法和设备提供一个网络中的包路由。一个收到的包有一个头字段和一个有效载荷字段。所述包的所述有效载荷字段被检查以用于确定如何使用路由规则路由该包,路由规则包含有通配符的所述有效载荷字段里的域大小,并且所述包基于该检查被有选择的进行路由。
附图说明
附图与说明书一起结合用来描述和解释本发明的优点和原理。
图1举例说明一个网络核心的智能路由。
图2是一个网络图,例示了用于发布者和下订单者的智能路由器。
图3例示了智能路由器和核心路由器的网络基础设施。
图4例示了一个智能路由器的硬件组件。
图5例示了发布者和下订单者机器。
图6例示了智能路由器的频道管理器。
图7例示了和智能路由器机器接口的用户机器的软件组件。
图8例示了一个智能路由器的软件组件。
图9例示了一个消息的包结构。
图10是一个发布者方法的流图。
图11是一个下订单者方法的流图。
图12是一个频道和下订单者屏幕的图。
图13是一个基于内容的路由方法的流程图。
图14是一个缓存方法的流程图。
图15例示了缓存索引。
图16是一个流出消息的代理方法的流程图。
图17是一个流入消息的代理方法的流程图。
图18例示了一个消息编码的例子。
图19是一个存储订单的数据库结构图。
图20是一个通配符方法的流程图。
具体实施方式
概述
一个Internet规模或其他分布式网络规模的事件通知系统可以通过一个发布-订单网络的强大、灵活的实现来提供应用。在所述系统中,一个应用程序使用事件通知应用程序接口(APIs)来发布通知,和/或者订单通知,并且在事件发生在网络中时接受通知。
所述系统中的一个通知被给予一个主题,该主题是一个字符串或其他结构,对该通知封装的信息种类进行分类。同样,一个通知由一组属性完成,这些属性包含该通知的详细信息。例如,一个应用可能使用所述的主题来发布关于纽约证券交易所交易事务的通知,该主题引用纽约证券交易所和属性符号以及价格。所述应用可能发布一个个人的通知,具有特殊的属性值,例如相当于SNE(索尼公司的股票交易号)的符号和相当于85.25的价格。如果一个通知中的属性不是全部在预先确定,结果这些属性将在所有有相同主题族的通知中被发现。然而,为了提供附加的详尽事件信息,发布者可以在每一个通知或其他基础上添加任意的属性。因此,不是所有的、或者甚至任意的属性都需要预先确定。
在所述系统中,不限制下订单者只能订单主题或整个频道。频道进一步解释和定义如下。它们包括一个分级结构,指明诸如一个主题域和相关子域(子主题)的一层或多层。这样,下订单者通过在这些通知属性上指明基于内容的过滤器(filter),可以提供更多感兴趣的微调表达式。例如,一个下订单者可能订单所有引用纽约证券交易所的符号等于SNE并且价格大于90.00的主题的通知(也许为该下订单者拥有的股票份额指明一个卖出的机会)。所有匹配所述订单的通知可以通过回呼(callback)或其它类型的功能递送给所述下订单者,这些功能是在下订单者注册其订单时或其他时候由下订单者提供的。一个订单可以分解到多个过滤器。
回呼可以执行许多计算,包括简单的如向一个终端写一个消息或者发送一个邮件,复杂的如初始化股票份额的销售,更复杂的如初始化新的发布-订单活动(例如,用一个在75.00买进的新订单替代已有的订单,或者发布一个该下订单者的有价证券已经修正的新通知)。
例如,应用在其发布和订单的活动中得到代理的帮助。这些代理可能利用或者由代理人实现。这些代理在使用时为流出通知和订单提供网络连接,并且向下订单者发送流入的匹配通知。一旦一个通知进入所述网络,系统的路由器网络向所有订单和该通知相匹配的下订单者传播所述通知。一种实现方式是向该网络的所有点广播所述通知,然后让这些应用代理决定所述通知是否和他们的下订单者相关。然而,这是一个没必要的可升级的方法—由于消息传输负载,所述网络通常会快速崩溃,特别是出现大量积极的和冗长的发布者时。并且甚至当足够的带宽不是个问题时,下订单者也会因为要处理如此多的通知而崩溃。
所述系统的典型网络在其路由通知时更有效。首先,它可以使用多点传送路由以确保一个通知能被传播,例如,在所述网络的任意连接上至多一次。然后,它可以使用过滤器上大量的优化方法来尽可能多的减少通知的传播。
图1从概念上例示一个网络核心中的所述智能路由。一个发布者14经由一个边缘路由器16传输消息里的内容到一个网络核心10,其用于一个发布-订单网络。一个发布-订单网络包括从发布者向下订单者路由数据或内容的任何类型的网络。所述内容经由一个或多个频道18传输,这些频道表示了路由器间或其他设备间的逻辑连接。网络核心10里的一个智能路由器12确定是否路由或转送所述消息。特别的,智能路由器12可以确定是否所述消息包括一个下订单者24订单的内容。
每一个订单封装一个主题过滤器和一个属性过滤器。路由器可以扩展一个主题过滤器为匹配主题的集合,并且在每一个主题基础上并入属性过滤器。一个智能路由器评估所述主题过滤器和所述通知的主题,并且评估所述属性过滤器和通知里的属性值。主题过滤器的语法可以用通配符,并且属性过滤器的语法可以用布尔表达式,两者在下面会有更详细的解释。术语“过滤器”用来描述一个下订单者有兴趣从发布者那里收到的一组事件。路由规则从过滤器里生成,并且由智能路由器使用以做出路由决定。
因此,举例而言,如果消息26和这整个过滤器集合都不满足,智能路由器12结束(丢弃)消息26,意味着所述消息不再向前传递。如果根据主题和属性过滤器的评估,整个过滤器集合中的某一个满足消息20,智能路由器12根据为匹配过滤器规定的所有路由和/或行为规则,或者经由边缘路由器22和对下订单者24而言可能的其他设备来路由(向前转递)消息20,或者用消息20执行路由器12的其他内部功能。这种搜索一直持续,直到用完整个过滤器集合,或者得到所有规则的决定,无论哪一个先到。
这种在一个网络核心的智能的基于内容的路由提供实时数据传输,如警报和更新数据。用于警报的实时数据传输例子包括下述内容,但不局限于此:股票报价、交易、新闻、旅行、天气、欺诈识别、安全、远程信息处理、工厂自动控制、供应链管理和网络管理。用于更新的实时数据传输包括以下内容,但不局限于此:软件升级、杀病毒更新、电影和音乐传输、工作流、存储管理和缓存一致性。许多其他的应用也有可能用于订单的信息传输。
表1例示了用主题和判定过滤的订单的存储。他们可以在网络的任何地方存成任何希望的或必要的数据结构类型。如下面解释的,这些判定是订单的成分。订单可以以任意的方式表示,下面提供一些例子。
    表1
    订单1     主题1     判定1
    ……
    订单N     主题N     判定N
表2为一个报价服务器提供了一个发布一订单的例子。所述例子仅仅提供例示,并且订单可以为任意类型的数据或内容包括任意数量和类型的参数。
Figure A0281844800161
这些判定为订单提供布尔表达式,并且这些主题为所述订单提供一个频道的指示。订单可以用许多不同的方式表达。使用布尔表达式只是一个例子,并且提供一种能力,可以轻松的转换所述订单到一个主题过滤器和一个属性过滤器,用于基于内容的路由。可替换的,表示订单可以不指明主题,但是,使用一个主题或频道(下面进一步解释)可以为解释和应用过滤器到属性提供关联。
路由决定可以在所述网络核心实现,并且遍及整个网络发布,从而缓和了发布者和下订单者机器上的处理负担,并且极大地增强了该网络的效率。图1仅出于示意的目的例示了一个发布者、一个下订单者和一个智能路由器;实现时可以包括多个发布者、多个下订单者和多个智能路由器。术语智能路由器针对一个路由器或其他通过在一个网络核心或其它位置检查一个包或消息的有效载荷,有能力做出路由决定的实体。
网络基础设施
图2是一个网络图,为发布者和下订单者例示智能路由器。如下面解释的,为了在智能路由器间路由消息,一个提供频道服务的路由实体30在一个网络基础设施(infrastructure)上是有效地分层的。一个发布者32概念上包括一个应用34,接收发布内容的指示,如为获取内容的一个指针,和为了经由频道服务30进行网络传输,对内容进行编码的一个代理36。逻辑上互连的智能路由器集合38、40、42、44、46和48使用从主题过滤器和属性过滤器生成的路由规则从发布者路由所述内容,以用于订单。多个连接39、41、43和45提供智能路由器38、40、42、44、46和48逻辑上的连接。其它连接37和47分别提供发布者32与智能路由器38间、和下订单者54与智能路由器46间的逻辑连接。下订单者54包括一个检查和接收订单内容的代理50,以及一个用来展现内容的应用52。
举个例子,一个频道可以包括一个在分布式方式里实现的逻辑上多点广播连接的集合。在所述实施方式里的一个频道是一个逻辑上相关联的网络资源集合,这些网络资源服务于发布者和下订单者的通讯以交换内容。所述内容根据频道的主题命名空间进行分类,并且这些资源经由频道管理者提供的频道服务管理、控制和供应。多个频道可以共享相同的资源。频道可以提供高级别目录服务,如下述例子,但不仅限于此:发布者和下订单者信息、认证和授权信息、消息类型、管理信息,以及记帐和帐单信息。频道还可以提供经由缓存的持续性、快速数据分发机制、安全,以及用户和网络管理。频道同样可以用于其他的目的。
智能路由器的过滤可以发生在网络核心以分发路由决定。另外,智能路由器也可以当作边缘路由器,连接一个用户设备,如一个发布者或一个下订单者,和该网络核心。同样,与网络连接的该设备可以当作一个发布者,经由该网络的路由决定推内容给下订单者,也可以当作一个下订单者接收推过来的内容。只要专门应用需要或希望,这些智能路由器和频道可以以任何结构连接,并且图2显示的结构只是出于例示的目的给出的。
图3是一个智能路由器和传统骨干路由器的网络基础设施示意图,图3还示意了频道间的逻辑连接。该例子里的智能路由器使用网络中已存在的骨干路由器,如Internet或其他分布式网络,并且这些智能路由器在骨干路由器上有效地分层。在此例中,Internet服务供应商(ISP)网络58、59和60,每一个包括几个骨干路由器,用于传统的消息或包的路由。多个智能路由器61-70在ISP网络58、59和60里与一个或多个骨干路由器相连。智能路由器61-70同样由多个链接73-85互联,73-85表示了链接的意思,并且这些链接也可以连接终端用户设备。智能路由器61-70可以由一个或多个如实体71的管理员机器,以及一个或多个如实体72虚拟私用网络(VPN)控制器控制。ISP网络58、59和60也可以连接到发布者和下订单者机器(图3没有显示)。在ISP58、59和60里的骨干路由器在已有的网络基础设施里以任意的传统方式互联。
如图所示的,智能路由器61-70和链接73-85可以用已有的网络基础设施实现,并且他们在网络核心提供基于内容的路由。这些链接73-85表示智能路由器61-70间的逻辑连接,并且可以用已有网络基础设施或其他设备实现。例如,一个链接可以用一个称之为隧道(tunnel)的逻辑连接实现。一个隧道包括硬件和可能的软件、用于实现一个链接的网络基础设施,并且一个隧道可以是多个频道的一个组成成分。这些频道为特殊类型的内容提供逻辑结构,然后为在这些频道上传输的属性提供关联,在智能路由器里推动基于内容的路由。虽然智能路由器可以不用频道做出路由决定,但是这些频道通过网络核心里的智能路由器促进了基于内容路由的效率。
这个实施例包括频道和链接的使用。一个链接是两个路由器(尽管是智能路由器)之间的一个连接。一个频道是一个包含路由器集合(通常很大)的网络实体,由互连链接静态或动态地配置,以达到一对多或多对多的逻辑连接。特别的,一个频道是一个上层逻辑实体,描述了该频道的基本特征。在一个频道之下会有多个主题。每一个主题将形成一个子网(如多点传送树),包括互连的路由器集合。这些基于主题的子网可以以不同的方式分配、适应和配置。所述频道,在其下形成主题的所有子网的集合,类似于网络的栅格(mesh)。
图4是一个智能路由器92的硬件组成示意图,符合任意其他的供参考的智能路由器。一个网络节点90可以包括智能路由器92,与传统骨干路由器95相连接。智能路由器92包括一个处理器93,和一个存储器94以及一个二级存储97(例如,可以用一个分离的机器实现)相连接,其中任何一个可以存储数据,同样可以缓存数据,并且存储应用,用于处理器93的执行。二级存储97提供稳定的数据存储。在如下说明的软件控制下,处理器93提供指令到骨干路由器95,让其基于从主题过滤器和属性过滤器生成的用于订单的路由规则路由(转送)或者不路由(丢弃)消息或包。虽然这被显示在一个独立的处理器控制设备里实现,可替换的,智能路由器92可以在骨干路由95里的特定用途集成电路(ASIC)里实现,可能通过嵌入软件在硬件里提供智能路由功能。这些智能路由功能还可以在一个或多个路由设备里用软件与硬件相结合的方法替代实现。
图5是一个发布者和下订单者机器的示意图。一个发布者机器100或者118可以包括下列组件:一个存储器102存储一个或多个发布者应用104以及一个代理应用105;一个二级存储设备112,提供稳定的数据存储;一个输入设备108,用于输入信息或命令;一个处理器114,用于执行存储在存储器102里的应用或者从其他存储设备里接收;一个输出设备110,用于输出信息;以及一个显示设备116,用于提供信息的可视化显示。
一个下订单者机器122或140可以包括以下组件:一个存储器124,存储一个或多个应用126以及一个代理应用128;一个二级存储设备130,提供稳定的数据存储;一个输入设备132,用于输入信息或命令;一个处理器134,用于执行存储在存储器124里的应用或者从其他存储设备接收;一个输出设备136,用于输出信息;以及一个显示设备138,用于提供信息的可视化显示。发布者和下订单者机器可以包括更多或更少的组件,或者不同的组件,并且以任何的配置结构。
发布者机器100和118和下订单者机器122和140通过如上描述的网络120相连接。网络120包括智能路由器,通过包或消息在网络核心里提供数据或内容的分布式路由。虽然只有两个发布者和下订单者机器显示出来,但是网络120可以包括更多发布者和下订单者机器。这些发布者和下订单者机器可以用任意处理器控制的设备实现,这些设备如下所示,但不仅局限于此:一个服务器;一个个人计算机;一个笔记本电脑;一个个人数字助理;一个电话;一个蜂窝电话;一个寻呼机;或者其他设备。有智能路由器的网络120可以包括任何有线或无线的分布式网络,和有线设备、无线设备,或者两者相连。网络120还可以潜在的使用已有的或者传统的网络基础设施。
图6是一个用于智能路由器的频道管理者150的示意图。在所述例子中,频道管理者150用多个服务器152、154和156来实现。每一个服务器包括其自身的本地存储158、160和162。智能路由器164、166和168联系频道管理者,以获得关于特殊频道的信息。所述频道管理者还可以提供数据持久性、失效功能,或其他功能。所述频道管理者提供频道服务,包括诸如网络中任何地方的一个数据库或者数据库集合的详细说明,与频道相关的信息,数据持久性的特性,发布者和下订单者的用户信息,以及基础设施信息等。所述基础设施信息包括诸如一个智能路由器的辨认以及和它们相连的对应隧道,这些频道的主题,以及这些频道的属性(每一个属性一个名字和类型)。包或消息还可以承载与频道相关的信息,包括固定属性和可变属性的辨认。
一个用户在线时可以下载频道信息。例如,一个用户可以使用用户名和密码注册。当鉴别用户的注销时,该用户可以打开(调用)一个频道并从该频道管理器获取该频道的信息。发布者可以在发布内容时使用该信息,并且下订单者可以使用该信息用于进入和注册订单。
在所述例子里,每一个频道管理器152、154和156担当每一个智能路由器的首选。特别的,此例中每一个智能路由器有两个IP地址,一个用于首选的频道管理器,另一个用于备份频道管理器。这些智能路由器使用那些IP地址联系管理器并获取频道信息。当首选的失败时,智能路由器联系备份的频道管理器。所述频道管理器152、154和156共享数据,如连接它们的线所示,关注频道属性和其他信息。每一个频道管理器还有一个指定的备份,这样一旦该频道管理器失败,另一个可以接管他的处理。所述网络中的设备可以使用命令获取频道信息,其例子在表3中给出。可替换的,智能路由器可以只有一个主要的频道管理器,或多于两个的频道管理器。
图7是一个与有智能路由器的网络相连的用户机器或设备里一个堆栈180里的软件组件的示意图。所述用户机器可以用作一个发布者、下订单者或两者皆是,并且它可以包括上面确定的例子设备。堆栈180可以包括一个或多个用户应用182,其可以从一个用户接收订单,从一个发布者接收频道信息,或者接收发布的内容或数据。用户应用182还可以包括由用户机器或设备执行的任意其他类型的应用。
所述堆栈180还可以包括一个代理184、一个事件库186、一个缓存库188、一个频道库190、一个消息库192和一个发报机库194。代理184用来建立网络连接或其它功能,表3给出代理184实现的命令的例子,其可以使用代理人命令或其他类型的命令。事件库186记录与一个用户机器相关的事件,或其他事件或信息。缓存库188提供本地数据缓存。频道库190存储频道的识别和其他信息。发报机库194给出和一个控制路径196、一个频道管理器198以及一个或更多智能路由器200的连接,并且它可以包括表4指出的示例功能。消息库192给出和一个数据路径204的连接。
表5-9给出C程序设计语言中的消息应用编程接口(APIs)的例子。表5和6给出发送和获取消息的APTs示例。表7和8给出发送和获取通知的APIs示例。表9给出发送和获取控制消息的APIs例子。此描述里的这些APIs和其他的APIs、程序和数据结构只是作为实现特殊功能或特征的例子被给出,这种实现可以包括任意程序设计语言里的任意类型的APIs或其他软件实体。
    Table 3
    代理命令的例子
    命令     功能
    pc.chn.open     打开频道,获取频道的所有信息,并且本地缓存
    pc.chn.close     关闭频道
    pc.chn.getRouterInfo     获取频道的路由器信息
    pc.chn.getAttributeInfo     获取频道的属性信息
    pc.chn.getProperties     获取频道的特性
    表4
    发报机功能
    Server-Side     监听连接(搁置接受)。创建一个线程处理每一个连接。该线程负责接收和处理来自该连接的所有请求。
    Client-Side     创建一个线程,初始化一个连接,并且负责接收和处理来自连接的所有数据。
    表5
    发送一个消息的API示例
PC_Status PC_msg_init(ChannelHandle ch,PC_UNIT chld,PC_UNIT userid,PC_TypeInfo*MsgType,PC_UNIT msgTypeSize,PC_msg_SessionHandle*sess);PC_Status PC_msg_cleanup(PC_msg_SessionHandle sess);PC_Status PC_msg_closeTransport(PC_msg_SessionHandle sess);PC_status PC_msg_create(PC_msg_SessionHandle s,PC_msg_DataType dType,PC_msg_MsgHandle*msg);PC_status PC_msg_delete(PC_msg_MsgHandle msg);PC_status PC_msg_clone(PC_msg_MsgHandle org,PC_msg_MsgHandle*new);
 PC_status    PC_msg_setSubject(PC_msg_MsgHandle msg,PC_char*subject);PC_status    PC_msg_setSubjectint(PC_msg_MsgHandle msg,PC_USHORT*subjectArray,PC_UNIT arraysize);PC_status    PC_msg_setAttrByNameInt(PC_msg_MSGHandle msg,const PC_char*name,PC_INT value);∥for each typePC_status    PC_msg_setAttrByPosInt(PC_msg_MsgHandle msg,PC_UNIT attributePos,PC_INT Value);∥for each typePC_status    PC_msg_addAttrInt(PC_msg_MsgHandle msg,const PC_char*name,PC_INT value);∥for each typePC_status    PC_msg_send(PC_msg_MsgHandle msg);
    表6
    获取一个消息的API示例
typedef struct_attribute{PC_char         *name;PC_TypeCode       type;void            *value;PC_UNIT          arraySize;}PC_msg_Attribute;typedef struct_attributeArray{PC_UNIT        size;PC_mas_Attribute     **attrs;}PC_msg_AttributeArray;PC_Status    PC_msg_init(ChannelHandle ch,PC_UNIT chld,PC_UNIT userid,PC_TypeInfo*MsgType,PC_INT msgTypeSize,PC_msg_SessionHandle*sess);PC_Status    PC_msg_cleanup(PC_msg_SessionHandle sess);PC_Status    PC_msg_recv(PC_msg_SessionHandle sh,PC_msg_MsgHandle*msg);PC_Status    PC_msg_ctrlRecv(PC_msg_SessionHandle sh,PC_msg_MsgHandle*msg);PC_Status    PC_msg_getSequenceNum(PC_msg_MsgHandle msg,PC_UINT*seqNo);PC_Status    PC_msg_getPublisherInfo(PC_msg_MsgHandle msg,PC_msg_PublicInfo*pub);PC_Status    PC_msg_getSubject(PC_msg_MsgHandle msg,PC_char **subject);PC_Status    PC_msg_getSubjectInt(PC_msg_MsgHandlemsg,PC_USHORT **subjectAIray,PC_INT*size);PC_Status    PC_msg_getDataType(PC_msg_MsgHandle hMsg,
PC_msg_DataType*dataType);PC_Status    PC_msg_getAttrByPosInt(PC_msg_MsgHandle msg,PC_UINT pos,PC_INT*val);∥for each typePC_Status    PC_msg_getAttrValueByNameInt(PC_msg_MsgHandle msg,const pC_char*name,PC_INT*val);PC_Status    PC_msg_getAttrTypes(PC_msg_MsgHandle msg,PC_TypeCode*Types,PC_INT*arraySize);PC_Status    PC_msg_getAttributeByPos(PC_msg_MsgHandle msg,PC_UINT attributePos,PC_msg_Attribute**attr);PC_Status    PC_msg_getAttribiiteByName(PC_msg_MsgHandle msg,const PC_char*name,PC_msg_Attribute**attr);PC_Status    PC_msg_getPredefinedAttributes(PC_msg_MsgHandle msg,PC_msg_AttributeArray**attrs);PC_Status    PC_msg_getDiscretionaryAttributes(PC_msg_MsgHandle msg,PC_msg_AttributeArray**attrs);Void    PC_msg_freeAttribute(PC_msgAttribute*attr);Void    PC_msg_freeAttributeArray(PC_msg_AttributeArray*attrArray);
    表7
    发送一个通知的API例子
ChannelHandle ch;PC_msg_MsgHandle  msg;PC_msg_SessionHandle sh;PC_msg_TypeInfo  Types[2];Types[0].type=PC_STRING_TYPE;Types[0].name=″company″Types[1].type=PC_INT_TYPE;Types[1].name=″stockvalue″PC_msg_init(ch,chld,userld,Types,2,&sh)PC_msg_create(sh,PC_MSG_DATA,&msg);PC_msg_setAttrValueByNameInt(msg,″stockvalue″,100);PC_msg_setAttrValueByPosString(msg,1,“PreCache”);PC_msg_addAttrString(msg,″comment″,″mycomments″);PC_msg_send(msg);PC_msg_delete(msg);PC_msg_closeTransport(sh);
 PC_msg_cleanup(sh);
    表8
    接收一个通知的API例子
ChannelHandle ch;PC_msg_MsgHandle msg:PC_msg_SessionHandle sh;PC_msg_TypeInfo Types[2];PC_msg_AttributeArray   *attrArray;PC_char*company;PC_INT value;Types[0].type=PC_STRING_TYPE;Types[0].name=″company″Types[1].type=PC_INT_TYPE;Types[1].name=″stockvalue″PC_msg_init(ch,chld,userld,Types,2,&sh);While(1){PC_msg_recv(sh,&msg);PC_msg_getAttrValueByPosStrmg(msg,0,&company);PC_msg_getAttrValueByNameInt(msg,″stockvalue″,&value);PC_msg_getDynamicAttributes(msg,&attrArray);PC_msg_freeAttnbuteArray(attrArray);PC_msg_delete(msg);}PC_msg_closeTransport(sh);PC_msg_cleanup(sh);
    表9
    发送和获取控制消息的APIs例子
    发送端代码     接收端代码
ChannelHandle ch;PC_msg_MsgHandle mh;Int chld=10;∥Get a Channel handle for channel 10PC_msg_init(ch,chld,publd,NULL,0, ChannelHandle ch;PC_msg_MsgHandle msg;PC_msg_init(ch,chld,subld,NULL,0,&sh);
&sh)PC_msg_create(th,PC_MSG_CONTROL,&mh);PC_msg_setSubject(mh,“#.ADD_SUBJECT″);PC_msg_addAttrInt(mh,”Chaimelld″,chld);PC_msg_addAttrString(mh,″Subject″,″Quote.cboe″);PC_msg_send(mh);PC_msg_delete(mh); for(;;){PC_msg_recv(sh,&msg);PC_msg_getSubject(msg,&subject);PC_msg_getAttrValueByNameInt(msg,″Channelld,&chld);PC_msg_getAttrValueByNameString(msg,″Subject″,&subject);PC_msg_delete(msg);}PC_msg_closeTransport(sh);PC_msg_cleanup(sh);
图8是如上面所说的那些智能路由器以及图4所示的智能路由器92的软件组件210的示意图。软件组件210可以存储在存储器94中,由智能路由器92里的处理器93执行。组件210包括一个过滤后台程序212、一个发报机214、一个路由后台程序216以及一个缓存管理器218。过滤后台程序212为基于内容的路由提供过滤,根据路由规则为订单处理内容,下面将做出解释。发报机214给出控制消息的通讯,如那些经由路径220传播过滤器所需要的通讯,该发报机还可以提供给用户一个登录点,以及有频道管理器的一个安全的插口(socket),以增强网络的安全性。换句话说,在此例中,用户不直接和频道管理器相连接,而是换另一种实现方式。发报机214用控制消息从一个频道管理器获得属性(名字-值对)。
路由后台程序提供和数据路径222的通讯,其可以经由图4所示的传统的骨干路由器或其他路由设备发生。缓存管理器218在包含相应智能路由器的网络结点上提供本地数据缓存。缓存管理器218的操作在下面会进一步解释,并且其可以提供贯穿网络核心的分布式的数据缓存。
基于内容的路由可以在内核层实现,作为在应用层实现的替换。所述内核可访问的存储器和应用层访问的分开。为了在所述应用需求里运行基于内容的路由,从内核存储区域复制消息数据到该应用区域,并且从该内核向所述路由应用交换所述应用的上下文。两者会导致实际的开销。如果改为所述内核被修改成支持基于内容的路由,那么所述路由会摆脱上面描述的开销而发生得更快。
由于所述内核里基于内容的路由的所述特征,所述路由后台程序216可以或者不能直接经由数据路径222发送或接收数据,而要依赖于实现。所述后台程序是一个运行在所述应用层的过程,预先计算所述基于内容的路由表,然后被注入到所述内核中。然而一旦被注入,所述路由表可以被该内核使用,从而做出路由决断。类似的,所述过滤器后台程序预先计算所述过滤表,然后注入所述内核。在所述内核实现里,所述路由后台程序和所述过滤后台程序都不直接和所述数据路径作用。
图9是一个消息的一个包结构230的示意图,可能包括订单的内容。用于基于内容的路由的一个包或消息包括一个头字段和一个有效载荷字段。该头字段指明路由或其他信息。该有效载荷字段指明数据或内容,或所述数据或内容的指示。包结构230包括一个IP头232,一个用户数据报协议(UDP)传输控制协议(TCP)头234,一个长度值238,一个或更多主题域240,以及一个或更多属性242。包结构230例示了一个长度值和所述主题以及所述属性的基础结构。一个用于基于内容的路由中的包还可以包括其他或不同的元素,如下面在图18的例子中所示的那些元素,并且用于基于内容的路由的包可以以任何方式配置。同样,所述属性可以包括任意的属性,附着在消息的最后。这些任意的属性是特别的信息,由所述发布者(或者甚至是路由器)加入,不需要用前面为频道描述的消息格式传输。
发布者和下订单者方法
图10是一个发布者用来设立一个频道并发布内容的发布者方法250的流程示意图。例如,方法250可以在软件模块中实现,包括代理106,由发布者机器100的处理器114执行。在方法150里,所述发布者机器里的代理106接收一个发布者为一个频道的一个代理的创建(第252步)。该代理提供网络通讯。代理106通过一个接口为所述频道确定一个消息格式(第253步),并且所述格式信息可以从诸如所述频道管理器或其他所述网络中的实体处得到。代理106用接收到的频道信息为所述频道设立代理(第254步),其包括接收所述频道的属性(第256步),以及在所述频道上创建一个通知(第258步)。所述通知为在所述频道上监听内容的设备提供内容。所述属性为所述通知定义参数和特征。
代理106传输所述频道的标识(ID)和内容信息到所述网络核心里或其他地方的智能路由器,用于处理订单(步骤260)。所述发布者用适当的值赋给所述通知的属性(步骤261),并且所述发布者就在通知上发布内容,与所述频道的属性相一致(步骤262)。此例中的步骤260-262完成发布所述通知,可替换的,依赖于特殊的实现,还可以包括不同的或附加的步骤。因此,此例中和一个通知相关的信息被分割成有序的属性序列,每一个都有一个名字、在所述通知中的一个位置(从1开始)、一个类型和一个值。可替换的,依赖于特殊的实现,属性可以有不同的特征。例如,属性可以包括预定义属性、自由决定的属性,或两者皆有。
所述智能路由器可以使用一个包里的所述频道ID来得到对应频道的属性,其确定了经由该频道传输的包的结构或格式。特别的,每一个包可以包含一个与一个频道ID和其他如发布者ID以及主题相关的头信息标签。这些标签可以用来映射主题到该消息格式中的数字,一个例子示于图18。小整数值,例如16位值,可以用于这些数。可替换的,任何其他类型的数或信息都可以用于映射这些主题。映射主题到数可以带来特别的好处;例如,它可以节省所述消息格式的空间,并且提供了一个统一或标准的方法来指明消息里的主题,这样他们可以被快速定位并被标识。智能路由器可以在本地存储所述映射,或者可替换的,通过一个命令,使用这些数字远程获取对应的主题。
表10例示了映射数字到主题的一个结构,在此例中使用整数值。表中所述主题树参数指出一个主题可以包括一个或更多主题域,形成层级关系;例如,一个主题树可以包括主题域的一个字符串,通过特殊符号划分界限。主题树的例子在表2中给出。作为例子,一个主题树quote.nyse包括一个主题“quotes”和一个子域“nyse”,两部分由一个“.”分割开来,可以在URLs或其他网络地址中发现这种表示方式。除了使用句点和指定URL类型的字符串,主题树可以用任何方法,用任何字符和符号作为分隔符来指定。
    表10
    Number     Subject Tree
    integer value 1     subject tree 1
    integer value 2     subject tree 2
    …     …
    integer value N     subject tree N
这样,知道一个特殊的频道的所述包格式或结构,所述智能路由器可以快速的定位用于基于内容的路由的所述包中的主题和属性,或其他信息。例如,一个频道可以指定在该频道上传输的主题和属性的字节位置,通过计算所述包里的字节可以方便的定位他们。可替换的,智能路由器可以分析包来定位主题和属性。或其他信息。
表11给出用C++语言写的一个发布者程序的例子。表12给出创建一个频道的一个API的例子。表13给出由一个频道管理器(见图6)维护的一个频道配置文件的例子,并且给出与频道相关的信息。可替换的,所述系统可以有一个全球的频道管理器,提供地理上分布的服务器的IP地址,这些服务器作为本地的频道管理器,可以分担处理的负担。
    表11
    发布者程序举例
    #include“PC_evn_Notification.h”#mclude″PC_evn_Proxy.h″using namespace precache∷event;int main(int argc,char argv[]){PC_UINT QuotesRUs=myChannelofInterest;∥channel IDPC_UINT myID=myPublisherID;∥publisher IDtry{
    Proxy p(QuotesRUs,myID);Notification n1(p,″quotes.nyss″);n1.SetPredefinedAttr(“symbol”,″LUS″);n1.SetPredefinedAttr(“price”,95.73);p.Publish(n1);Notification n2(p,″quotes.nyse″);n2.SetPredefinedAttr(1,″SNE″);∥attribute symbolis in position 1n2.SetPredefinedAttr(2,80.18);∥attribute price is in position 2p.Publish(n2);}catch(InvalidChannelException icex){cerr<<″bad channel″<<endl;}catch(InvalidSubjectException isex){}catch(InvalidNotificationException inex){cerr<<″bad notification″<<endl;}catch(Exception ex){cerr<<unknown error<<endl;}}
    表12
    创建一个频道的API举例
    PC_Status  rc;rc=PC_chn_create(Provider_info,authinfo,ConfigurationFile,&hChannel);
    /*the first one primary channel manager*/rc=PC_chn_addChannelManager(hChannel,″10.0.1.1″);/*secondary channel manager*/rc=PC_chn_addChannelManager(hChannel,″10.0.2.2″);*/rc=PC_chn_setProperties(hChannel,ConfigurationFile);/*Set the message type(only in fixed part of the message)by using rc=PC_chn_setAttributeType(hChannel,name,position,attributeType).The type information is propagated to all edge routers.*/rc=PC_chn_setAttributeType(hChannel,“Priority”,1,PC_UINT16JTYPE);rc=PC_chn_setAttributeType(hChannel,“Alarm_Name”,2,PC_STRING_TYPE);rc=PC_chn_setAttributeType(hChannel,″Alaim_Time″,3,PC_INT32_TYPE);rc=PC_chn_updateAttribute(hChannel);rc==PC_chn_close(hChannel);/*finish channel creation*/
    表13
    一个频道配置文件的例子
    #Channel Setup-Read by Channel API,event and messaging#Each channel entry information is tagged with the#type of information e.g.#[ChannelComm 5] for Channel 5 Communication relatedinformation#[ChannelSubjects 5] for subject related information in channel 5#[ChannelAttributes 5] for attribute information in channel 5#
    #The Channel id is appended to the tag to indicate#the channel that the information belongs to#e.g.[ChannelComm 5] indicates routing information#for channel 5.##All the fields need not be set.For example if#running with the central server,the MulticastIP is#not needed.[ChannelComm 5]MulticastIP=225.0.0.1RouterIP=test3RouterPort=12345ProxyPort=9015ProxyCtrlPort=9016[ChannelSubjects 5]NumberOfSubjects=2subject1=#.SUBSCRIPTIONmappmg1=0.100subject2=Quotes.Nysemapping2=102.101[ChannelAttributes 5]NumberO£Attributes=4name1=StockIdtype1=PC_UINT_TYPEname2==Companytype2=PC_charARRAY_TYPEname3=Pricetype3==PC_FLOAT_TYPEname4==Volumetype4=PC_UNIT_TYPE
图11是一个下订单者方法264的流程图,用于接收和处理订单。方法266可以用诸如软件模块来实现,包括代理128,由下订单者机器122里的处理器134执行。在方法264里,一个图形用户界面(GUI)给用户呈现一个可用频道的指示(步骤266),可以由应用126完成。标识所述频道的信息可以从诸如提供频道相关信息的频道管理器处接收。任何类型的应用126可以用任何特殊的方法或格式来呈现频道的标识。所述应用接收一个用户的一个频道选择(步骤268),并且调用一个API或其他程序用于所选的频道(步骤270)。所述API给用户显示与所选项一致的频道的订单选项(步骤272)。所述API从用户那接收订单值(步骤274),并且发送该订单到代理128进行处理,下面会进行解释(步骤276)。
所述订单的参数可以包括诸如表1中例示的判定。为了根据相应频道的特殊需求或参数处理订单,每一个频道使用其自己的API。这些APIs可以包括诸如用来接收订单的基于web或基于Java的APIs,并且可以使用任何类型的用户界面和处理来接收订单信息并通过它到代理应用。
图12是频道和下订单者屏幕或GUIs 278和284的概念示意图,其可以和方法264一起使用,用来接收一个订单。屏幕278包括多个部分282,标明一个用户可选的可能的频道。当选择一个特殊的频道时,屏幕284显示在一个部分286接受一个用户的订单值。一个用户可以选择一个部分288来提交订单,或者选择一个部分290来取消订单。屏幕278和284可以是格式为超文本标记语言(HTML)的网页页面或其他任何形式。同样,所述屏幕可以包括任何部分和内容的配置,例如,为了提供一个用户友好的和可视化的、吸引人的界面给下订单者,可能包括文本、图形、图片、各种颜色,或多媒体信息。所述屏幕还可以包括一个工具栏280,提供诸如传统的浏览功能。
表14给出用C++语言写的一个下订单者程序的例子。
    表14
    下订单者程序举例
#include<unistd.h>#include<iostream>#k c.jde“PC_evn_Filter.h”#include″PC_evn_Subscription.h″#include“PC_evn_Proxy.h″
using namespace precache∷event;class SubscriberApp:public Subscriber{private:PC_UNIT notificationCount=0;public:SubscriberApp(){}??default constructorvoid run()){PC_UNIT QuotesRUs=myChannelofInterest;∥channel IDPC_UINT myID=myPublisherID;∥publisher IDtry{Proxy         p(QuotesRUs,myID);FilterFactory*factory=FilterFactory∷GetFilterFactoryO;Filter*     f=factory->CreateFilter(p,“symbol=”LU””);PC_INT       cl=0;SubscriptionHandle sh=p.Subscribe(“quotes.nyse”,f,this,(void*)&cl);while(notificationCount<2){    ∥let notifyO get some notificationssleep(5);}p.Unsubscribe(sh);}catch(InvalidChannelException icex){cerr<<“bad channel”<<endl;}catch(InvalidSubjectException isex){cerr<<“bad subject”<<endl;}catch(InvalidChannelException ifex){cerr<<″bad filter″<<endl;}catch.(InvalidSubscriptionHandleException  ishex){cerr<<″bas subscription handle″<<endl;}catch(Exception ex){cerr<<“unknown error”<<endl;}}void Notify(Notification*n,void*c)    ∥this is the callback method
{if(*(PC_INT*)c==0){∥check the closure objectPC_STRING symbol;PC_FLOAT price;n->GetPredefinedAttr(“symbol”,symbol);n->GetPredefinedAttr(″price″,price);cout<<″The price of′<<symbol<<″is″<<price<<endl;;notificationCount++;}}};int main(int argc,char argv[]){SubscriberApp a;a.run();}
经由有效载荷检查和频道的基于内容的路由
图13是经由有效载荷检查方法300的一个基于内容路由的流程图。方法300可以在软件模块里实现,由智能路由器92里的处理器93执行,如过滤后台程序212所描述的。可替换的,其可以在ASIC里实现,或者结合硬件和软件来实现。方法300里所示的基于内容的路由可以在网络里任何地方的智能路由器里执行,如在网络核心里或在边缘路由器里。
通常,基于内容的路由包括检查一个包的有效载荷字段,以确定怎样处理这个包。这种基于内容的路由方法可以包括诸如以任何顺序处理订单表(例如使用过滤器),主题对主题、并且属性对属性的比较一个消息和路由规则,以确定所述消息的路由,以及在一个网络核心里执行所述处理。这些规则可以包括管理路由器内部处理的规则或者与一个过滤器相关的任何规则。这样,这些路由决定可以分布于整个网络核心。频道表示的主题的使用决定了一个消息的格式,这样,提供给一个智能路由器在所述消息里快速定位属性的一个方法,例如通过知道他们在一个特殊频道的消息或包里的字节位置来快速定位属性。
在方法300里,智能路由器92接收一个消息的包(步骤302)。它从该包确定相应消息的频道ID(步骤304),并且用该频道ID获取该频道的属性(步骤306)。在此例中,频道的类型(由频道ID确定)决定了所述包里属性的位置。频道的这些属性可以本地存储或者远程获取,如经由一个频道管理器。智能路由器92获取一个过滤器,其对应于一个订单(步骤308)。所述过滤器包括一个或多个属性测试,通常订单有一组属性测试。智能路由器92应用所述包里的属性到所述过滤器描述里的相应的属性测试集(步骤310)。
如果所述过滤器描述里的所有属性测试都产生肯定结果(步骤312),那么意味着这些属性满足所有的属性测试,所述智能路由器执行一组函数,这些函数由与所述过滤器相关的规则规定(步骤314)。这些函数可以包括诸如路由所述包到下一个链接,以及/或者在本地路由器按规则规定的,用包的内容执行某些行为或计算。所述行为或下一个链接可以在指定对应订单的一个数据结构里标识。当所述规则是一个链接时,它通常标识接收该包的下一个网络节点,可以包括一个智能路由器、骨干路由器、一个网络连接设备,或者其他实体。可替换的,下一个链接可以以其他的方式指明或与订单相关。
如果所述过滤器描述里的所有属性测试不能产生一个肯定结果(步骤312),那么意味着这些属性不能满足所有的属性测试,所述过滤器被宣称是不匹配的(步骤315)。所述智能路由器递归地执行上述过程,直到过滤器里的所有属性测试都用完了,或者遇到第一个否定的结果,无论哪一个先到。
一旦所述过滤器的所有的属性测试都处理完,该智能路由器确定是否有更多的路由器存在(步骤316),如果是,则回到步骤308,以获取下一个过滤器的属性测试集来处理这些属性。所述匹配过程一直持续(步骤308、310、312、314、315和316),直到每一个过滤器都用完,或者所有行为或路由规则的结果可以确定,无论哪一个先到。如果所述包不能满足任一个过滤器,它将被结束(丢弃),并且不会向前传递。
智能路由器92可以以任何特殊的顺序通过过滤器排序。例如,如表15所示,智能路由器可以在一个文件里或路由表里存储用于订单的过滤器,并且线性的排序他们,以应用属性到过滤器(属性测试集)。可替换的,该路由表可以包括这些过滤器的链接或指针。
所述基于内容的路由可以随意的同时使用多于一种的方法,这依赖于应用和性能增强启发式,如基于交通条件的交换算法。用于处理的所述过滤器可以在网络里的一个路由器上随意的加密、解密、传输和合并,用来执行基于内容的路由的有效载荷字段的检查。例如,一个诸如价格>$3.54122的订单可以截成价格>$3.54,因为知道应用里的发布不包含小数点后两位以后的流通属性。同样,比如说当从海外发送的一个发布到达位于美国的第一个路由器时,外国货币也可以转换成美国货币。
作为线性方法的替换,智能路由器92可以选择过滤器以其他顺序处理,或者根据不同的算法进行处理,其可以提高处理的速度和效率。表16给出订单和他们的相应链接的例子;在这些例子里,所述主题和一个特殊的频道相关,并且该主题的订单可以由过滤器的路由规则表示。所述主题可以包括网络地址,如指明一个内容来源的统一资源定位器(URLs)。
    表15
    频道1
    订单     链接
    过滤器1a     链接1a
    过滤器2a     链接2a
    …     …
    过滤器Na     链接na
    …
    频道N
    订单     链接
    过滤器1N     链接1a
    过滤器2N     链接1b
    …     …
    过滤器NN     链接1n
    表16
    内容判定     链接
    sub=″quote.optimist″&(($1>5&$2=“LU”)|($1>30&$2=″T″))     x10,x11
          (sub==″sony.music″|sub=″sony.movie″)&$1>30&$4=″Beethoven″     x11,x13
           sub=″movie.ratings″&($1>1999|$2=″Kurosawa″)&$3=″**″     x11,s15
                       网络节点缓存
图14是一个缓存方法320的流程图。方法320可以在软件模块里实现,由智能路由器92的处理器93执行,如缓存管理器218所示。可替换的,其可以在ASIC里实现,或者结合硬件和软件实现,与对应的智能路由器相比,可以是相同的也可以是不同的物理设备。在方法320里,智能路由器92接收一个有数据和内容的消息,一个频道ID,和主题(步骤322)。智能路由器92给数据打上时间标记(步骤324),并且在本地缓存它,如存储器94或二级存储97(步骤326)。它用频道ID、主题和时间戳给缓存的数据建立索引(步骤328)。
如果智能路由器92接收一个数据的请求(步骤330),那么它根据请求,使用索引获取缓存数据(步骤332)。智能路由器92传输缓存的数据到骨干路由器95或其它路由实体作为给请求者或其他人的最终的传输。为了持续的缓存数据并且获取缓存数据以响应相应请求,方法320可以重复的执行。
图15是一个用方法320建立缓存索引的(336)示意图。缓存索引(336)接收数据(338)并且按时间标记进行存储(340)。随着数据被收集,它被标以每一个区间δt,其中δt表示两个记号间的时间,如t2-t1。可替换的,以任何其他方式标记时间的索引类型也可以使用。
表17从概念上例示了缓存数据的索引。表18从概念上例示了为缓存存储一个连接历史的一个数据结构。表19提供了数据结构的例子,用于在有智能路由器的网络节点进行本地缓存数据。
所述时间标记可以以任何固定的或可变的时间间隔出现。例如,数据可以每五分钟缓存和建立索引一次。当接收一个命令要获取指定时间和主题的缓存数据(如#.getCache)时,频道管理器218使用缓存索引来确定是否它能获取对应于请求的缓存数据,见步骤332。
每一个主题或频道可以包括它自己在多点传送树里的IP地址,以及一组智能路由器。因此,表18表示了这些路由器间的连接历史,其可以存储在本地用户机器里;如果一个边缘路由器失败,该机器可以访问所述连接历史,从而决定如何向上回溯,在所述边缘路由器重新在线时,重新为该频道连接路由器。例如,它还可以断掉连接一段时间后执行一个得到缓存命令,从而为订单得到任何未决的内容。
    表17
    t1     频道ID 1     主题1-n     指向缓存数据的指针1
    t2     频道ID 2     主题1-n     指向缓存数据的指针2
    tn     频道ID N     主题1-n     指向缓存数据的指针N
    表18
    连接历史
    时间     路由器     网络地址
    t1     R2     UR2     UR3
    t2     R2     UR2     UR3
    …
    表19
    智能路由器的缓存数据结构举例
    频道节点
    Struct ChannelNode{PC_UINT unChanld;PC_AttributeInfo  *pAttdnfo;
    PC_BOOL    bPersistent;/*Persistent or RT*/PC_UINT    unTimeout;PC_UINT    unTimeGranularity;/*in minutes*/PC_INT    nDirFd;HashTable  *pFirstLevelSubjs;}
    主题节点
    Struct  SubjectNode{PC_USHORT        unSubjectld;PC_UINT           unSubjLevel;Void             pParent;/Channel or Subject*/PC_INT           nDirFd;HashTable        *pNextLevelSubjs;DataNode         *pData;}
    数据节点
    Struct DataNode{PCJNT      nDirFd;SubjectNode     *pParent;LastTimeGrainNode      *pLastTGrainData;DLIST     *pStoredData;/*list StoredTimeGrainNode*/PC_Mutex      mStoredDataLock;}
    存储时间粒度节点
    Struct StoredTimeGrainNode{PC_UINT        unStartTime;/*in minutes*/Chanld;PC_UINT        unEndTime;/*in minutes*/PC_INT       nFd;}
    最终时间粒度节点
    Struct LastTimeGrainNode{PC_char         pLastTGrainData;/could be a list*/PC_UINT        unLastTGrainStartTime;PC_BOOL         bReadyToStore;
    PC_Mutex    mCachedDataLock;}
这些示范的数据结构包括这面的信息。一个主题节点包含一个主题标识,主题层,指向父频道或主题节点的指针,其自身目录的文件描述符,包含它的下一层主题节点的哈希表指针,以及数据结点指针。一个数据节点包括一个指向其主题父节点的指针,数据目录的文件描述符,包含数据结构用于在每一个存储设备上存储数据的循环缓冲器,缓冲器的头和尾,以及在获取和存储期间锁定数据节点的锁。存储时间粒度(grain)节点是表示真实数据文件的节点,最终时间粒度节点表示仍然没有存储到存储设备,但是保留在内存里的最终的缓冲。此例中,缓存和数据存储线程使用最终时间粒度节点的互斥来防止同时访问最终时间粒度节点。
代理处理
图16是一个代理方法350的流程图,用于一个流出的订单消息。方法350可以在代理128表示的软件模块里实现,由用户(下订单者)机器122的处理器134执行。在方法350里,代理128通过图11和12描述的方法接收一个订单(步骤352)。代理128创建一个字符串,为所述订单指明一个布尔表达式(步骤354),并且分析该字符串以检查所述订单中的任何可能的错误(步骤356)。如果有错误存在,代理128可以给用户显现一个错误消息(步骤360),使得所述用户可以改正错误并重新进入该订单。如果所述订单不包含错误(步骤358),代理128该存储表达式到一个数据结构,其中一个例子在下面给出(步骤362)。代理128把数据结构中有修改权的不等表达式转化成肯定的形式(步骤364),并且转化该数据结构为相应的析取范式(DNF)结构(步骤366)。代理128还简化DNF结构中的AND表达式,使其只包含范围过滤器和成员测试(步骤368)。
所述DNF是一个众所周知的规范形式,其中布尔表达式被表示成一个或多个子表达式的或(OR),称之为析取(disjunct)。例如,布尔表达式(price>=10 AND(symbol==”LU”OR“symbol==”T”))有一个等价的DNF表示,为((price>=10 AND symbol=”LU”)OR(price>=10 ANDsymbol==”T”))。
步骤364里的转换涉及转换有不等算子的表达式(例如可能的句法表示为!=)为等价的肯定形式,其指明了所有允许的值,而不是一个不允许的值。这种转换在创建DNF之前执行,并且这种转换是必需的,因为此例中的路由器要求公式是肯定的形式。例如,表达式(price!=80)可以转换成等价的表达式(price<=79 OR price>=81)。
步骤368里的转换在DNF被创建之后执行,并且包含对结果AND表达式的额外化简,在此例中,还化简了路由器的工作。特别的,同一个属性的多个属性测试的与(AND)可以化简成一个有一个下限、一个上限、一个下限和一个上限,或者在同等测试情况下的一个单一的值的规范的“范围过滤器”。范围过滤器的特殊类型根据表22进行编码。
例如,表达式(price>=10 AND price<=80 AND price>=20 ANDprice<=100)可以化简成表达式(price>=20 AND price<=80),这是又有下限又有上限的范围过滤器例子。化简后的其他类型的例子如下:(price>=20)(只有下限);(price>=80)(只有上限);以及(price==50)(单一值)。在创建这些范围过滤器时,一些子表达式可以化简成真或假,在这种情况下,子表达式可以根据布尔代数的规则消除,从而进一步优化消息里的表达式编码。例如,表达式(price>=50 AND price<=20)化简为假,因为没有“price”的值可以满足该表达式。在整个过滤器表达式化简为假的特殊情况下,代理根本不需要创建消息,从而可以减轻路由器的不必要工作。
如果所述主题过滤器包含通配符,代理128可以按照下面的解释随意转换它们(步骤370)。否则,任何通配符可以在网络中转换,而不是在用户机器上或其他设备上。在这种实施方式里,主题过滤器的句法是使用统配符的唯一句法,并且属性过滤器的句法是使用布尔表达式的唯一句法。可替换的,实现可以对主题过滤器和属性过滤器用不同的或各种类型的句法。
代理128把结果DNF表达式编码成一个消息(步骤372),并且传输该消息到一个智能路由器(步骤374)。所述编码涉及转换订单为一个单调(flat)的消息格式,这意味着其由一串数据组成。这种传输包括传播从用于订单的主题过滤器和属性过滤器生成的路由规则到一个或多个智能路由器或者网络中的其他路由实体。例如,为了传播,订单表达式可以映射成一个传统的包结构。
步骤372的编码包括把一个频道的订单编组成一个消息API的消息格式,贯穿一个频道传播。例如,一个订单作为有主题#.SUBSCRIPTION的通知被内部通知。由于存在可变数目的主题过滤器域和可变数量的属性测试,一对字节用来存储主题过滤器域的数量,并且另一对字节用来存储属性测试的数量。从而主题过滤器的个别域被顺序的分组,例如,按照它们在原始订单里的被指定的顺序,并且每一个按两字节排列成消息的一部分。通配符域可以如下排列。
在编组属性测试时,测试的操作数被编组在消息的最后,方法类似于编组通知的属性值。在编组属性测试和操作数之前,它们由DNF的每一个析取项里的属性顺序,用预定义属性上的测试进行归类成位置顺序,跟着名字顺序的任意属性上的测试。更进一步,每一个析取项里数量值属性上的相关测试集合被简化成规范的形式,如范围过滤器有一个限制(左或右开域,或者相等测试)或者两个限制(两个明显限制间的闭域)。关于测试的剩下的信息被编码成两个字节对,和操作数是相同的顺序;所述两字节对的序列被立刻置于消息里,跟着主题过滤器域的两字节编码序列。所述两字节对可以组成一个形式,为属性测试的比特-串编码序列,除了两字节对以外,其还可以用来表示其他类型的编码。属性测试的例子在下面给出。
属性测试的编码模式在表20描述。表21例示了两个字节对的编码,并且表22例示了用两字节对进行操作数ID的编码。
    表20
    编码规则
    1     第D位的一个零指出DNF的一个新的析取项的开始,而第D位的一个1指出当前析取项里的附加连接。
    2     通知属性位除了全1的值外,其余的指出测试应用的预定义属性的位置(由频道的通知类型定义);用于测试的操作数被编组,如图18例子所示。
    3     通知属性位全1的值指出测试应用于任意的属性,该种情况下,测试应用的名字的长度和属性的名字用操作数进行编组。
    4     操作数类型ID的位编码成属性的一个预定义类型。
    5     操作数ID的位编码用于测试的算子,如表22定义。
    表21
    第一字节
    0     1     2     3     4     5     6     7
    D     通知属性位置
    第二字节
    0     1     2     3     4     5     6     7
    操作数类型ID     算子ID
    表22
    操作员     操作员ID
    左开域     000
    右开域     001
    闭域     010
    相等测试     011
    肯定成员测试(in)     100
    否定成员测试(not in)     101
因为用于一个测试的两字节对已经指明了测试操作数的类型和该测试是否应用于预定义的或任意的属性,所以没有必要对在任一属性或其类型上执行的测试数量进行分组。所述设计假设在一个通知里有不超过127种预定义的属性。可替换的,所述设计可以用更多位来对属性测试进行编码。
虽然所述编组转换根据属性过滤器的DNF定制和聚合了属性测试,但是一个基础设施元素(如路由器)可以选择以其他的顺序评价这些测试(也许根据不同测试的成功或失败可能性的动态导出数据),从而使得整个属性过滤器的评价更有效。消息的订单ID域是一个由代理生成的值,用于唯一指定订单到该代理的边缘路由器,在后续的请求里修改或取消该订单。特别的,一个订单的属性过滤器的动态修改用图18的例子所示的消息格式传播,除了主题是#.RESUBSCRIPTION,并且订单ID是先前被修改的注册订单的ID。一个取消订单用图18的消息格式传播到订单ID域,主题是#.UNSUBSCRIPTION,并且订单ID是被取消的先前注册的订单。
下面给出一个例子,说明上面描述的代理做的转换和编码。考虑下面的作为例子的属性过滤器表达式:price>=10 and(symbol==”LU”or(volume>=1000 and volume<=10000))。图19显示一个统一建模语言(UML)图表390,描述了步骤362里代理用到的对象,以存储该表达式。该图示意了指明订单的层级关系,其可以包括变量、常量值,或两者。依赖于专门的实现,该图中的对象可以是过滤器类的实例。每一个简单过滤器对象描述属性的值,用于存储关于过滤器表达式的对应属性测试的信息。在图19的表示中,一个OR过滤器396连接两个AND过滤器392和400。所述AND过滤器392包含一个简单过滤器394,有订单的属性。同样的,所述OR过滤器396包含一个简单过滤器398,并且AND过滤器400包含简单过滤器402和404。
为了所述例子的目的,假设属性price,symbol和volume是相关频道的预定义属性,并且假设他们分别定义在位置0,1和2。进一步的,假设属性的类型分别是无符号整数(类型码6)、字符数组(类型码12),以及无符号整数(类型码6)。
考虑下一个订单,其包含上述例子的属性过滤器表达式作为其属性过滤器。图18介绍了把所述订单编组成消息。图18左边示意性的386显示事实上的消息内容,右边示意性的388给出该消息不同部分的图例。此例中每一个示意的宽度是4个字节。在编组前,过滤器已经转换成它的等价DNF:(price>=10 and symbol==”LU”)or(price>=10and volume>=1000 and volume<=10000)。
16位的属性测试编码显示成比特序列,间隔显示不同部分间的分离。注意到此例中price上的两个测试不能结合,这是因为它们在独立的析取项,并且它们可以单独分组,范围没有右边界(“右开域”)。另一方面,volume上的两个测试可以结合,这是因为它们在相同的析取项里,并且他们一起分组,作为单一“闭域”测试。
最后,还要注意某些域可以描述成“假设”,这意味着这些域的值在此例中是任意选择的,并且通常独立于被编组的订单。另外,订单的主题过滤器任意的选择是“>”,其匹配由相关频道定义的任何主题。上面描述的以及在图18和19中显示的例子只是出于示意的目的,并且所述编组可以和任何其他类型的订单使用。同样,方法350只是给出一个分组订单的例子,并且它们可以以任何其他的方式进行编组。
图17是流入消息的代理方法376的流程图。方法376可以由代理128和用户机器122上的应用126实现。在方法376中,代理128从一个智能路由器接收一个消息,对应于一个订单(步骤378)。代理128确定对应于该订单的一个频道(步骤380),例如通过消息里的频道ID,并且为该频道调用一个API(步骤382)。所述API在GUI里或用户机器上的其他形式里呈现订单数据(步骤384)。流入消息的处理可以使用对数据进行解码的过程,和上面描述的编码过程相反,并且所述解码(与编码相反)可以在一个路由器里或其它网络实体里执行。
通配符处理
图20是一个通配符方法410的流程图。所述方法例示了对过滤器用一组路由规则,从而转换订单表达式中的通配符。方法410可以由代理128表示的软件模块实现,由用户机器122的处理器134执行。可替换的,通配符可以在网络中由处理器93处理,在智能路由器92的软件控制下或ASIC91包含的相应功能里。通配符包括开放域或者可变长域,其例子在表21中给出。
在方法410里,代理128或其他实体接收有通配符的一个订单(步骤412)。订单的主题长度可以由一个发布者在发布内容的时候指明,并且所述主题可以在发布者机器上进行预处理,例如,计算主题的域,然后获得域的数目(长度)。代理128计算过滤器操作数里的域的数量(步骤414),并且初始化一条新规则(过滤器),即域长度=N(步骤416)。代理128获取订单的子域(步骤418),并且决定过滤器操作数子域O[i]是否是一个通配符(步骤420)。如果所述过滤器操作数子域不是一个通配符,那么代理128加入连接短语到此规则,域[i]=O[i](步骤422)。如果所述过滤器操作数有多个子域(步骤424),代理128返回步骤418以处理附加的子域。参数“i”表示一个域,其中i是一个整数,表示此例中域的数目。
在处理了子域后,代理128确定最后的过滤器操作数子域是否是“>”(步骤426),并且如果是这样的化,它改变域的长度约束为长度>N-1(步骤428)。统配符处理可以使用任何类型的符号,并且“>”只是这样的一个例子。在此例中,“a.>”可以表示a.b,a.c,a.d等,以及它们的所有层次的所有子主题(例如,a.b.x,a.c.x,a.b.x.y等)。其它符号可以用于通配符的其它实现。
如果必要,代理128传播转换规则到智能路由器或者其他网络中的实体(步骤430)。因此,所述方法通过子域迭代,对通配符进行转换,从而处理它们为没有统配符的规则,这意味着规则不包含通配符。通配符的转换可以发生在网络的任何地方,例如在下订单者机器上或在一个智能路由器里。所述转换可以发生在一个实体里,而转换规则向其他实体传播,或者转换可以动态地发生。
表23连同例子一起,给出处理通配符的这些路由规则的一个总结。这些路由规则可以在智能路由器里生成,或者在其它网络实体中生成,并且向该智能路由器传播。另外,表23中的路由规则只是用于示意的目的,并且其他的路由规则也可以转换通配符。
    表23
    原始规则     转换规则
    subject=″a.b″      subject.length===2&subject[0]===″a″&subject[1]==″b″
    subject=″C.*.D″      subject.length==3&subject[0]=″C″&subject[2]=″D″
    subject==″foo.>″      subject.length>1&subject[0]==”foo”
    subject=″*.*.b.*.c.>″        subject.length>5&subject[2]==“b”&subject[4]==“c”
本发明结合一个具体实施例进行了描述,可以理解,对于本领域普通技术人员而言,许多修改是显然的,并且所述应用意图覆盖任何的修改或其中的变化。例如,不同类型的发布者机器,用户或者下订单者机器,频道和频道的配置,以及基于内容的路由和其他功能的硬件和软件实现可以得到应用,而不离开本发明的范围。所述发明仅仅通过权利要求和其中的等价物受到限制。

Claims (59)

1.一个处理网络中包的方法,包括:
接收一个包含一个头字段和一个有效载荷字段的包;
检查网络核心中的所述包的所述有效载荷字段,用来确定怎样处理所述包;和
基于所述检查,有选择地处理所述包。
2.根据权利要求1的方法,其中所述的检查步骤包括确定所述有效载荷字段的信息是否匹配一个结构里的内容判定信息,所述内容判定信息和相应网络目的地或相应支配路由处理的规则相联系。
3.根据权利要求1的方法,进一步包括在所述网络核心的一个路由器上执行所述检查步骤。
4.根据权利要求1的方法,其中所述检查步骤包括应用一个过滤器到所述有效载荷字段的信息。
5.根据权利要求4的方法,进一步包括在所述网络中,传送所述过滤器到一个路由器,用来执行所述检查。
6.根据权利要求1的方法,进一步包括对所述网络中的路由器进行编程,以执行所述的接收、检查和处理步骤。
7.根据权利要求1的方法,其中所述检查步骤包括检查属性,用来确定怎样路由所述包。
8.一个方法,用来在一个网络中处理消息,包括:
接收有一个头字段的消息,至少有一个主题,并且至少有一个属性;
从所述消息获取所述主题和所述属性;
基于所述主题获取一个订单;并且
为了确定怎样路由所述消息,在一个网络核心里应用所述属性到所述订单。
9.根据权利要求8的方法,其中所述获取所述订单的步骤包括获取一个对应于所述订单的过滤器。
10.根据权利要求8的方法,进一步包括如果所述属性满足所述订单,则路由所述消息。
11.根据权利要求8的方法,进一步包括如果所述属性不满足所有订单,则丢弃所述消息。
12.根据权利要求8的方法,进一步包括:
获取对应于多个订单的多个过滤器;
从所述消息获取多个属性;
应用每一个所述属性到每一个所述过滤器,来确定是否有对应的订单满足;并且
基于是否有订单满足,有选择的路由所述消息。
13.根据权利要求8的方法,进一步包括在所述网络核心的一个路由器上执行所述应用步骤。
14.一个方法,用来配置一个频道以助于基于内容的路由,包括:
建立一个频道,在一个发布—订单网络的多个节点之间提供一个逻辑通讯路径;
配置所述频道,在所述通讯路径上用于信息的基于内容的路由;并且
选择一个消息格式,基于所述频道,用来在所述通讯路径上传输。
15.根据权利要求14的方法,进一步包括在主题和所述消息格式的成员间进行映射,其中,所述主题对应于所述频道上发布的内容。
16.根据权利要求14的方法,其中所述配置步骤包括配置所述频道,用于基于订单执行包过滤。
17.根据权利要求14的方法,其中所述建立步骤包括在所述网络的多个路由器之间分配所述频道。
18.根据权利要求14的方法,其中所述建立步骤包括基于所述频道上发布的内容设立所述频道。
19.根据权利要求18的方法,其中所述建立步骤包括:
为所述频道确定一个消息格式;
为所述频道设立一个代理;
基于所述消息格式,创建一个通知;并且
发布所述通知。
20.根据权利要求14的方法,进一步包括为了所述频道上发布的内容,从一个用户接收一个订单。
21.根据权利要求20的方法,其中所述接收订单的步骤包括:
接收所述频道的一个选择;并且
为所述频道的所述用户的订单接收参数。
22.根据权利要求20的方法,进一步包括在所述频道上发送所述用户的订单到网络核心的一个路由器。
23.根据权利要求14的方法,进一步包括:
经由所述频道接收内容;
在所述网络的一个路由器上本地缓存所述内容;并且
对所述缓存内容打上时间标记。
24.根据权利要求23的方法,进一步包括通过所述频道的标识、对应于所述频道的主题的标识,以及所述的时间标记对所述缓存内容建立索引。
25.根据权利要求23的方法,进一步包括:
在所述路由器接收一个关于所述缓存内容的请求;并且
基于所述请求和所述时间标记,获取并传输至少一部分缓存内容。
26.一个方法,用来配置一个频道以助于基于内容的路由,包括:
在一个网络的路由器之间建立逻辑连结;
配置所述逻辑连接作为一个频道,用于与至少一个主题相关的内容的传输;并且
经由所述频道,提供用于基于内容的路由的属性。
27.根据权利要求26的方法,进一步包括传输所述频道的标识和属性到所述网络的路由器。
28.一个方法,用来在一个发布—订单网络中传输判定,包括:
接收一个表达式,包括与一个订单相关的布尔值判定;
把所述表达式编码成一个消息,在所述网络中传输,用于基于内容的路由;并且
为了给所述订单提供基于内容的路由,传输所述消息到一个网络核心的至少一个路由器。
29.根据权利要求28的方法,其中所述编码步骤包括转换所述表达式到一个单调的消息格式。
30.根据权利要求28的方法,其中所述接受步骤包括接收所述判定的合取、析取或否定项。
31.根据权利要求28的方法,其中所述编码步骤包括转换所述表达式为对应的析取范式。
32.根据权利要求31的方法,其中所述编码步骤包括转换所述析取范式为对应的属性测试的比特—字符串编码序列。
33.根据权利要求28的方法,其中所述编码步骤包括转换所述表达式中的不等参数为确定形式。
34.根据权利要求31的方法,其中所述编码步骤包括化简所述析取范式中的AND表达式,包含范围过滤器和成员测试。
35.根据权利要求28的方法,进一步包括:
接收所述订单;并且
从所述订单创建所述表达式。
36.根据权利要求28的方法,进一步包括分析所述表达式,以检查所述订单里的错误。
37.根据权利要求28的方法,进一步包括在一个数据结构中存储所述表达式。
38.一个方法,用于为一个发布—订单网络存储订单,包括:
指明一个结构,在所述网络中存储一个订单;
分解所述结构为多个子表达式;
使用这些子表达式共同地指明一个特殊的订单;并且
把一个布尔值判定和所述特殊订单的至少一个所述子表达式联系在一起,其中,为了给所述订单提供基于内容的路由,所述布尔值判定为所述特殊订单提供一个通知元素的指示。
39.根据权利要求38的方法,其中所述使用步骤包括使用多个子表达式中的一个特殊的子表达式。
40.根据权利要求38的方法,其中所述关联步骤包括把一个合取、析取、或否定判定和所述特殊订单的所述子表达式联系在一起。
41.根据权利要求38的方法,进一步包括为所述特殊订单的至少一个子表达式指明一个常量。
42.根据权利要求38的方法,进一步包括为所述特殊订单在多个通知元素之间指明一个关系。
43.根据权利要求38的方法,其中所述指明步骤包括指明一个层级结构,其中有多层用于指明子表达式。
44.根据权利要求38的方法,其中所述分解步骤包括使用所述子表达式在一个析取范式里存储所述订单。
45.根据权利要求38的方法,其中所述分解步骤包括转换所述订单里的不等参数为字表达式里的确定形式。
46.根据权利要求44的方法,其中所述分解步骤包括简化所述析取范式里的AND表达式,在子表达式里包含范围过滤器和成员测试。
47.根据权利要求38的方法,进一步包括:
接收所述订单;并且
从所述订单中创建所述子表达式。
48.根据权利要求38的方法,进一步包括为了检查所述订单里的错误,分析所述子表达式。
49.一个方法,用于在一个网络里路由包,包括:
接收一个包,其有一个头字段和一个有效载荷字段;
检查所述包的所述有效载荷字段,用于确定怎样路由所述包,通过使用路由规则,其限制了有通配符的订单的域的大小;并且
基于所述检查,有选择地路由所述包。
50.根据权利要求49的方法,进一步包括在一个网络核心的路由器上执行所述检查步骤。
51.根据权利要求49的方法,其中所述检查步骤包括使用从一个过滤器里生成的所述路由规则。
52.根据权利要求51的方法,其中所述检查步骤包括:
计算所述有效载荷字段里的一个过滤器操作数的域的个数;
基于所述过滤器操作数的域的数量,为所述过滤器操作数生成一个域长度规则;并且
循环所述过滤器操作数的每一个子域,直到检查到一个子域包含一个通配符,基于所述域长度规则转换所述子域。
53.根据权利要求52的方法,其中所述检查步骤包括在所述有效载荷字段里使用限制所述子域大小的一个过滤规则。
54.一个方法,用于在一个网络中路由消息,包括:
接收一个消息,其有一个头字段,至少一个主题和至少一个属性;
从所述消息里获取所述主题和所述属性,所述属性包含至少一个通配符操作数;
转换所述通配符操作数为一个相应的非通配符路由规则;
基于所述主题获取一个订单;并且
为了确定怎样路由所述消息,应用所述属性到所述订单。
55.根据权利要求54的方法,进一步包括在一个网络核心的一个路由器上执行所述应用步骤。
56.根据权利要求54的方法,进一步包括使用一个过滤器,以应用所述属性到所述订单。
57.根据权利要求54的方法,其中所述转换步骤包括:
计算所述订单的一个操作数的域的数量;
基于所述操作符的域的数量,为所述操作符生成一个域长度规则;并且
循环所述操作数的所有子域,直到检测到一个通配符匹配,基于所述域长度规则,转换所述子域。
58.根据权利要求57的方法,其中所述转换步骤包括使用一个过滤规则,其限制了所述有效载荷字段里的所述子域的大小。
59.一个设备,用来在一个发布—订单网络中处理包和订单,包括:
执行权利要求1-58的方法的任何一个的一个或多个模块。
CNB028184483A 2001-08-15 2002-07-25 在发布-订单网络中通过有效载荷检查和订单处理的包路由 Expired - Fee Related CN100438398C (zh)

Applications Claiming Priority (20)

Application Number Priority Date Filing Date Title
US31207501P 2001-08-15 2001-08-15
US31207601P 2001-08-15 2001-08-15
US31207401P 2001-08-15 2001-08-15
US31207701P 2001-08-15 2001-08-15
US60/312,075 2001-08-15
US60/312,074 2001-08-15
US60/312,076 2001-08-15
US60/312,077 2001-08-15
US32952601P 2001-10-17 2001-10-17
US60/329,526 2001-10-17
US10/199,368 US7545805B2 (en) 2001-08-15 2002-07-19 Method and apparatus for content-based routing and filtering at routers using channels
US10/199,356 2002-07-19
US10/199,369 US6910033B2 (en) 2001-08-15 2002-07-19 Method for storing Boolean functions to enable evaluation, modification, reuse, and delivery over a network
US10/199,368 2002-07-19
US10/199,439 US7117270B2 (en) 2001-08-15 2002-07-19 Method for sending and receiving a Boolean function over a network
US10/199,439 2002-07-19
US10/199,388 2002-07-19
US10/199,356 US20030165139A1 (en) 2001-08-15 2002-07-19 Packet routing via payload inspection
US10/199,388 US7411954B2 (en) 2001-10-17 2002-07-19 Efficient implementation of wildcard matching on variable-sized fields in content-based routing
US10/199,369 2002-07-19

Publications (2)

Publication Number Publication Date
CN1650566A true CN1650566A (zh) 2005-08-03
CN100438398C CN100438398C (zh) 2008-11-26

Family

ID=29408280

Family Applications (1)

Application Number Title Priority Date Filing Date
CNB028184483A Expired - Fee Related CN100438398C (zh) 2001-08-15 2002-07-25 在发布-订单网络中通过有效载荷检查和订单处理的包路由

Country Status (7)

Country Link
EP (2) EP1419608A4 (zh)
JP (3) JP2005500741A (zh)
KR (1) KR20090037962A (zh)
CN (1) CN100438398C (zh)
AU (1) AU2002356068A1 (zh)
HK (1) HK1082858A1 (zh)
WO (1) WO2003017562A1 (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106777276A (zh) * 2016-12-29 2017-05-31 微梦创科网络科技(中国)有限公司 用户信息的索引存储及原生信息展示的方法和装置
CN110620722A (zh) * 2018-06-20 2019-12-27 北京京东尚科信息技术有限公司 一种订单处理的方法和装置

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB0305066D0 (en) 2003-03-06 2003-04-09 Ibm System and method for publish/subscribe messaging
JP4751436B2 (ja) * 2008-10-21 2011-08-17 株式会社東芝 通信装置
US10698859B2 (en) 2009-09-18 2020-06-30 The Board Of Regents Of The University Of Texas System Data multicasting with router replication and target instruction identification in a distributed multi-core processing architecture
US9183580B2 (en) * 2010-11-04 2015-11-10 Digimarc Corporation Methods and systems for resource management on portable devices
KR101715080B1 (ko) 2011-06-09 2017-03-13 삼성전자주식회사 네임 기반의 네트워크 시스템에서 펜딩 테이블의 오버플로우를 방지하는 노드 장치 및 방법
JP5954330B2 (ja) * 2011-09-02 2016-07-20 日本電気株式会社 イベント通知サービス方法およびシステム
JP5942994B2 (ja) * 2011-09-02 2016-06-29 日本電気株式会社 イベント通知サービス方法およびシステム
US9311639B2 (en) 2014-02-11 2016-04-12 Digimarc Corporation Methods, apparatus and arrangements for device to device communication
US10452399B2 (en) 2015-09-19 2019-10-22 Microsoft Technology Licensing, Llc Broadcast channel architectures for block-based processors
US9397973B1 (en) * 2015-10-16 2016-07-19 Machine Zone, Inc. Systems and methods for transferring message data
US10963379B2 (en) 2018-01-30 2021-03-30 Microsoft Technology Licensing, Llc Coupling wide memory interface to wide write back paths

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5873084A (en) * 1996-01-18 1999-02-16 Sun Microsystems, Inc. Database network connectivity product
US6463446B1 (en) * 1998-02-26 2002-10-08 Sun Microsystems, Inc. Method and apparatus for transporting behavior in an event-based distributed system
US6091724A (en) * 1997-11-20 2000-07-18 International Business Machines Corporation Routing messages within a network using the data content of the message
US6216132B1 (en) * 1997-11-20 2001-04-10 International Business Machines Corporation Method and system for matching consumers to events
CN1619561A (zh) * 1997-12-08 2005-05-25 新日铁系统集成株式会社 商品交易装置
GB2345164A (en) * 1998-12-24 2000-06-28 Ibm Publish and subscribe data processing with subscriber option to request subscription propagation prior to acknowledgment
EP1043671A3 (en) * 1999-03-19 2003-07-16 International Business Machines Corporation Message broker providing a publish/subscribe service and method of processing messages in a publish/subscribe environment
US6321267B1 (en) * 1999-11-23 2001-11-20 Escom Corporation Method and apparatus for filtering junk email

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106777276A (zh) * 2016-12-29 2017-05-31 微梦创科网络科技(中国)有限公司 用户信息的索引存储及原生信息展示的方法和装置
CN106777276B (zh) * 2016-12-29 2020-03-10 微梦创科网络科技(中国)有限公司 用户信息的索引存储及原生信息展示的方法和装置
CN110620722A (zh) * 2018-06-20 2019-12-27 北京京东尚科信息技术有限公司 一种订单处理的方法和装置
CN110620722B (zh) * 2018-06-20 2022-09-30 北京京东尚科信息技术有限公司 一种订单处理的方法和装置

Also Published As

Publication number Publication date
CN100438398C (zh) 2008-11-26
HK1082858A1 (en) 2006-06-16
JP2005500741A (ja) 2005-01-06
EP1419608A1 (en) 2004-05-19
EP2112804A3 (en) 2009-12-02
EP1419608A4 (en) 2008-05-28
JP2008252907A (ja) 2008-10-16
AU2002356068A1 (en) 2003-03-03
WO2003017562A9 (en) 2003-11-13
KR20090037962A (ko) 2009-04-16
WO2003017562A1 (en) 2003-02-27
JP2008211835A (ja) 2008-09-11
EP2112804A2 (en) 2009-10-28

Similar Documents

Publication Publication Date Title
US7551629B2 (en) Method and apparatus for propagating content filters for a publish-subscribe network
US7545805B2 (en) Method and apparatus for content-based routing and filtering at routers using channels
US7587517B2 (en) Packet routing via payload inspection for quality of service management
US6910033B2 (en) Method for storing Boolean functions to enable evaluation, modification, reuse, and delivery over a network
US20040002967A1 (en) Method and apparatus for implementing query-response interactions in a publish-subscribe network
US7653753B2 (en) Method and apparatus for content-based packet routing using compact filter storage and off-line pre-computation
US7680900B2 (en) Publish/subscribe messaging system
US7139844B2 (en) Method and system for processing financial data objects carried on broadcast data streams and delivering information to subscribing clients
US8386633B2 (en) Method and system for processing raw financial data streams to produce and distribute structured and validated product offering data to subscribing clients
CN1701304B (zh) 在发布-订购网络中通过有效载荷检测进行分组路由的系统、方法和装置
US20040076155A1 (en) Caching with selective multicasting in a publish-subscribe network
CN100486170C (zh) 传送前摄http内容的方法和设备
JP2008252907A (ja) ペイロード検査を介したパケット・ルーティング、及びパブリッシュ/サブスクライブ型ネットワークにおけるサブスクリプション処理
Wu Service Computing: Concept, Method and Technology
CN100458767C (zh) 用于在公共预订网络中可靠并且高效地进行基于内容的路由、查询以及响应的方法和设备
CN1465169A (zh) 在计算机网络中利用语义描述标记对数据分组进行高性能寻址和路由选择
US20060106748A1 (en) System and method for orchestrating composite web services in constrained data flow environments
US20040083305A1 (en) Packet routing via payload inspection for alert services
US20120102219A1 (en) System and method for managing an internet domain based on the geographic location of an accessing user
US20030165139A1 (en) Packet routing via payload inspection
CN101312457A (zh) 在发行-预订网络中使用的方法、路由器、设备和该网络
JP2004506272A (ja) 未加工金融データを処理して、妥当性検査した商品案内情報を加入者に対して生成するシステム
US7411954B2 (en) Efficient implementation of wildcard matching on variable-sized fields in content-based routing
US20080147835A1 (en) Partially decentralized composition of web services
Suji et al. A comprehensive survey of web service choreography, orchestration and workflow building

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
REG Reference to a national code

Ref country code: HK

Ref legal event code: DE

Ref document number: 1082858

Country of ref document: HK

C14 Grant of patent or utility model
GR01 Patent grant
REG Reference to a national code

Ref country code: HK

Ref legal event code: GR

Ref document number: 1082858

Country of ref document: HK

C17 Cessation of patent right
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20081126