Lobby 定义了一个批处理操作,允许客户端将多个OBIX 请求组合到一个操作中。将多个请求组合在一起通常可以比单个循环网络请求提供明显的性能改进。一般情况下,一个大的请求性能总是会超过网络上的许多小请求。
批处理请求是作为标准OBIX 操作实现的读取、写入和调用请求的聚合。在协议绑定层,它使用Lobby.batch URI 表示为单个调用请求。将一组请求批处理到服务器必须在语义上等同于以线性顺序单独调用每个请求,批处理操作输入BatchIn 对象并输出BatchOut 对象:
BatchIn 合同指定使用Read,Write 或Invoke 合同标识的要处理的请求列表:
BatchOut 合同指定每个相应请求的响应对象的有序列表,例如,BatchOut中的第一个Object 必须是BatchIn 中第一个请求的结果。使用错误对象表示失败,每个通过BatchIn 传递的URI 用于读取或写入请求必须在BatchOut 中具有相应的结果Obj,其中href 属性使用来自BatchIn 的相同字符串表示(不允许规范化或大小写转换)。(www.xing528.com)
由OBIX 服务器决定如何处理部分故障,通常幂等请求应该使用err 指示部分失败,并继续处理批处理中的其他请求。如果服务器在遇到错误时决定不处理其他请求,则仍然需要为每个未处理的请求返回错误。来看一个简单的例子:
在此示例中,批处理请求指定对“/ someStr”和“/ invalidUri”的读取请求,然后是对“/ someStr”的写入请求。请注意,写入请求包括要写为名为“in”的子项的值。服务器通过为每个请求URI 指定一个对象来响应批处理请求。第一个读请求返回一个str 对象,表示由“/ someStr”标识的当前值。第二个读取请求包含无效的URI,服务器返回一个指示部分失败的错误对象,并继续处理后续请求。第三个请求是写入“someStr”,服务器更新“someStr”处的值,并返回新值。请注意,请求按顺序处理,因此第一个请求提供原始值“someStr”,第三个请求包含新值,这正是每个请求单独处理时的预期结果。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。