HTTP客户端必须手动问询以获取更新。HTTP没有提供一个事件或改动的推送方法来通知其HTTP客户端。为了避免轮询时产生的无效流量,OData的$deltatoken参数仅返回改动或添加项。

VariableValueGroups情况下,$deltatoken提供更新的变量值,忽略自上次请求以来没有改动的变量值。

工作原理如下:

HTTP客户端读取组的VariableValues属性。

GET http://my_server:3580/nivariable/VariableValueGroups('1587dcd4a87d118ae3ddd0fce09246f6')/VariableValues?$format=json

HTTP客户端获取初始数据集合。要获取服务器端的改动,HTTP使用下列_delta属性提供的URI和VariableValue读数的时间标识作为$deltatoken

GET http://my_server:3580/nivariable/VariableValueGroups('1587dcd4a87d118ae3ddd0fce09246f6')/VariableValues?$format=json&$deltatoken=1305692428170

如自上一次GET请求以来没有改动,结果为空。如要再次获取改动,使用上次回复的delta URI。

GET http://my_server:3580/nivariable/VariableValueGroups('1587dcd4a87d118ae3ddd0fce09246f6')/VariableValues?$format=json&$deltatoken=1305692428170

注: 请求未改动的△值不会造成HTTP客户端的错误。

按指定周期轮询捆绑至外部I/O或其他共享变量的变量

如共享变量捆绑至外部I/O或其他共享变量,值更新的时间标签可能早于deltatoken。例如,在时间t请求△值的改动,新值改动会在t +1时达到,但时间戳是t -1。下一次得到另一个服务器端的改动时,服务器便不再把t -1时间戳的值视为新值。要避免该问题,使用$delta按指定的周期轮询变量值。