gpt4 book ai didi

java - 如何将 spring-data-rest 与 spring websocket 混合到一个实现中

转载 作者:IT老高 更新时间:2023-10-28 13:44:29 26 4
gpt4 key购买 nike

我想将状态同步到对特定实体更改感兴趣的所有客户端。所以我想实现这样的目标:

  • 在实体上公开 CRUD API(通过 HTTP/RESTwebsockets)
  • 并将(修改调用的)响应路由到 websockets主题

所以从技术上讲,我会对混合的想法感兴趣spring-data-restspring websockets implementation实现类似 spring-data-websocket 的东西。

我想到了两种解决方案,实际上两者都是:

  • spring-data-rest 通过 REST/HTTP API 公开我的实体
  • websocket Controller (用于实体的修改调用)

websocket Controller 看起来像这样:

@Controller
public class EntityAWebSocketController {
@MessageMapping("/EntityA/update")
@SendTo("/topic/EntityA/update")
public EntityA update(EntityA entityA) throws Exception {
// persist,....
return entityA;
}
}

场景 1:Websocket API来自 REST/HTTP API

规则:

  • 客户端请求始终为 REST/HTTP API
  • 回复是 REST/HTTP API对于所有操作
  • 此外,对于修改操作,websocket消息也来了

从技术上讲,可以通过以下方式实现:

  • 调用websocket来自 spring-rest-data events 的 Controller (即在AfterCreateEventAfterSaveEventAfterLinkSaveEventAfterDeleteEvent中)

仍然解决方案对我来说似乎很糟糕,因为我需要去:

  1. 客户 A -- HTTP请求--> 服务器(spring-data-rest Controller )
  2. 服务器(spring-data-rest Controller 中的AfterXXXEvent) -- websocket消息--> Spring websocket Controller
  3. Spring websocket Controller -- websocket通过主题发送消息--> 所有对该主题感兴趣的客户
  4. 服务器(spring-data-rest Controller )--HTTP响应-->客户端A

场景 2:Websocket API独立于 REST API

规则:

  • 客户端请求是 REST/HTTP API仅用于非修改操作
  • 回复是 REST/HTTP API仅用于非修改操作
  • 客户端发送websocket所有修改操作的消息
  • websocket仅针对所有修改操作向客户端发送消息

好吧,如果没有其他想法出现,我会选择后一个,但是,如果我能以某种方式生成 C(R)UD,那就太好了通过 websockets 公开的方法同样,类似 spring-data-websockets 的东西,只处理我实现中的路由。

我觉得我必须手动公开(通过 *WebSocketController s)所有 CUD我所有实体的方法。我可能太懒了。

想法?

最佳答案

场景 2 在最后一步中讨论了一个客户。但我认为您的要求是针对一个主题,因为您需要多个客户。如果我想根据您的要求完成 2,那么您可能需要维护一个客户端列表并实现您自己的队列,或者使用 ForkJoinPool 向所有在您的 WebSocket 上监听的客户端发送消息。话虽如此,A 主题在这里肯定更优雅,但不同的界面整体看起来太复杂了

对于从客户端到服务器的所有消息,只需使用简单的有线协议(protocol)并使用集合来参数化,它可以是RParam1.......

在服务器上,您需要一个 Controller 来将这些映射到不同的请求(和操作)。不知何故,看起来工作量不大。希望这会有所帮助。

关于java - 如何将 spring-data-rest 与 spring websocket 混合到一个实现中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21278307/

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