问题是:适配器是线程安全的吗?
我们知道适配器可以有会话变量,因此客户端的一次调用创建的状态可以在后续调用中访问(如果我们使用集群,则假定会话亲缘性)。这里有question/answer示例确认。
鉴于客户端代码正在对适配器进行异步调用,客户端显然可以向适配器发出多个同时请求,因此两个此类请求之间存在争用相同会话变量的竞争条件的可能性
我看到两种可能性(暂时忽略集群成员之间的一致性问题):
Worklight Server可能允许并行请求在不同的线程中运行,在这种情况下,如果会话状态变量可能存在材料不一致同步,则需要使用Java构造或数据库来实现任何线程安全逻辑我们必须实施。
Worklight Server可能会对会话的请求进行排队,因此适配器是线程安全的(在单个进程中),因此我们的代码更简单。
Worklight承诺什么?
答案 0 :(得分:3)
这是Worklight架构师之一所说的:
Worklight在全局的单独线程中运行请求 变量可作为共享Scriptable访问所有这些线程 宾语。从技术上讲,两个并发请求来自同一个 会话更新共享对象的多个字段可能会留下 对象处于不一致状态。
然而从应用逻辑的角度来看,这是一种罕见的 应用程序发送并发请求更新的情况 具有不同值的相同数据。通常它是一种不受欢迎的流动 客户端的应用程序阻止(通过忙碌 指标等...)。如有必要,开发人员可以使用简单同步 适配器代码中的构造,如维护“inProgress” 布尔全局变量,如果inProgress ==则拒绝更新请求 真。
如果存在需要同步的真实用例,那就是 有趣的是学习它并可能提出一个不同的解决方案。