gpt4 book ai didi

java - 将 websocket 连接同步到同一端点

转载 作者:行者123 更新时间:2023-11-29 13:57:01 25 4
gpt4 key购买 nike

在我的代码中,有一个 websocket 服务器代表连接的客户端将信息保存到数据库。

我正在使用 Jetty 9、Hibernate 和 Postgres。

本质上,当客户端通过 websocket 发布数据对象时:

  • 服务器反序列化数据
  • 根据内容检查对象是否已存在于数据库中
  • 如果找到匹配项
    • 服务器将更新数据库行,并表明该项目已经存在
  • 其他
    • 服务器将创建一个新的数据库行并指示该项目已添加。

在这个系统中:

  • 端点(即 URL)对应于单个用户主体
  • 允许到同一端点的多个连接,这意味着从不同客户端到单个用户的多个连接。
  • 数据库中的数据对象是特定于用户的

(这意味着服务器将只检查属于用户的行以查找已存在的项目)

这一切都运行良好,除非 2 个客户端恰好在同一时间发布相同的数据。两个服务器实例都不知道对方,数据库最终有 2 行相同,除了服务器生成的 ID。

如何防止服务器同时写入相同的数据?我不能在数据库中使用 UNIQUE 约束,因为我实际上必须支持具有相同数据但在不同时间发布的多行。

我可以使用“session.getOpenSessions()”将所有其他 session 附加到同一端点。

我可以:

  • 以某种方式在端点上同步?
  • 同步 session 附加的内容?
  • 对线程配置做些什么?

感谢您的任何建议。

最佳答案

当你说:

Checks to see if the object already exists in the database, based on content

您已经定义了一个唯一约束,这意味着有一个列集组合必须是唯一的,这样当您匹配现有行时,您将更新而不是插入。

数据库已经提供了集中式并发控制机制,因此您可能应该在上述所有列上使用索引。

关于java - 将 websocket 连接同步到同一端点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29830685/

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