gpt4 book ai didi

java - 确保在 GAE/J 中每个用户请求处理序列化

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:37:36 26 4
gpt4 key购买 nike

google appengine的默认模式是每个实例都以单线程模式运行。如果需要,它们通过生成新的 JVM 实例来处理并发请求。

A new switch虽然允许 Appengine 在同一实例上并行处理多个请求。

到目前为止,为了确保同一用户的请求之间的线程安全,我在定期托管的 Java Web 应用程序中一直在做的是在 http session (或 session 中存储的值)上进行同步。 Spring does it以及(使用 synchronizeOnSession 标志)。

这在 GAE 中是不可能的,因为 HttpSession(连同它存储的所有变量)在每个 http 请求中总是新的。也就是说,哈希码总是不同的。因此,对其进行同步没有任何效果。但即使这是可能的,appengine 也不能保证来自同一用户的两个请求将由同一实例处理(类似于粘性 session )。

appengine 的新标志警告:

If you wish to use concurrent requests, your application code needs to use proper thread synchronization before you enable .

那么,我如何才能确保我的应用程序对于来自同一用户的操作是线程安全的?我主要关注用户可以对其 http session 中现有数据执行的操作。我显然只关心在同一实例中同步同一用户的请求。

谢谢

最佳答案

一些注意事项:

  1. 尝试在客户端保持应用程序状态,即使用 javascript 处理它。在那里,您可以防止用户一次发送多个请求或乱序发送。

  2. 由于 GAE 可以在不同的服务器上并行运行多个实例,因此您在 session 上进行同步的努力在大多数情况下都会奏效,但不能保证始终奏效。

  3. 我想您正在尝试做的是防止用户将其数据置于不一致状态(通过乱序执行操作)。最终,GAE 中唯一的同步点是数据存储事务。使用它们使数据保持一致状态。

关于java - 确保在 GAE/J 中每个用户请求处理序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6320672/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com