MonitoredItem
每个监控项均指明了要监控的项目(item)和用来发送通知的订阅。
item可以是一个节点的属性(node attribute)。
- MonitorItem可以监控一个属性,一个变量或者一个事件
- 可以通过MonitorItem定义的过滤器(fiter),来决定是否产生一个通知
- Queue attribute定义了可以被缓存的通知数量,可以通过配置策略决定丢弃新消息还是最老的消息
Triggering model
- MonitoredItem服务允许某item只有在关联Item被触发时才会被触发
- 这是通过在触发对象和被触发对象间建立连接来实现的
Notification
描述了数据变化和事件的数据结构,通知会被打包为NotificationMessage并传送给Client。
订阅会以客户定义的发布间隔周期性的发送NotificationMessage。
Subscription
订阅用来向客户端报告通知,其行为可以被总结如下:
- 订阅包含一组由客户端分配的监控项。监控项可以生成通知,这些通知,由订阅发送给客户端
- 订阅拥有一个发布间隔,订阅的发布间隔定义了订阅执行的循环率。每次执行,订阅均试图发送一条NotificationMessages,NotificationMessages中包含了还没有报告给客户端的通知
- 订阅以回应发布请求的方式向客户端发送NotificationMessages。发布请求通常以接收顺序存储到Session中,当有通知需要发送时,在每次发布循环时,会从队列中取出相应的请求,并发送通知到客户端,如果没有待发送通知,请求则不会从队列中被删除
- 在循环的开始,如果已经存在待发送通知但还没有发布请求,服务器将会进入等待状态,一旦接收到发布请求,则立即向客户端发送通知,无需等待另外一次循环
- 订阅有一个存活计数器,保存了没有发送通知的周期循环次数,当循环次数达到用户在创建订阅时配置的预置,则会发送一条存活消息到客户端,同时从队列中取出一条发布请求,用于表示该订阅仍然处于存活状态。存活Notification