将 JaxRS REST 服务与 WebSocket 集成

Integrating JaxRS REST service with WebSockets

我正在尝试开发一个实现发布者-订阅模式的社交网络(有点像 Twitter):用户可以关注其他人,因此在他们的关注者发布新内容时会收到通知。

我现在所拥有的是一个使用 JaxRS 实现的工作 REST 服务,运行 over Tomcat 7,提供登录、注册、获取配置文件数据和提交 posts 的服务。 Servlet 映射是通过 web.xml

完成的

My JaxRS app config

RestServices

Web.xml

但是应用的权重来自pubsub部分。这就是事情变得混乱的地方。

在谈到技术和实现之前,这个 pubsub 的生命周期:

假设 A 和 B 是该应用程序的一些用户,A 关注(订阅)B。

  1. A 导航到他的 "timeline",因此在服务器中注册一个 WebSocket 端点,当他所订阅的任何人发布任何内容时,他将从该端点接收通知。 (A,他自己,会是话题吗?)
  2. B 发布了一个新的 post,它通过 HTTP POST /post.
  3. 发送到 JaxRS 服务
  4. 服务器将发布存储在数据库中,然后通过 WebSocket 将其发送给监听订阅者。由于 A 还活着并且正在收听,因此该出版物是通过他的 WebSocket/topic.
  5. 发送的
  6. A 收到新发布的通知。

我使用过 Java 内置 WebSockets(javax.websocket)、Spring websockets(通过 STOMP)和 JavaScript 内置和 SockJS .我知道 JaxRS 有一个叫做服务器发送事件的东西,它的作用类似于 websockets,但我完全不知道如何初始化和使用它们。

我的疑惑:

1) 我可以 "mix" 例如 Spring Websockets 与我的 JaxRS 服务器以及如何初始化它?

2) 使用 JaxRS 和 SSE,我可以在服务器上动态创建 WS 端点吗?

提前致谢

最终使用 Jersey 的服务器发送事件解决了这个问题,虽然 IE 不支持,但可以满足我的需要

这是 SSEProvider and SSEDispatcher

的代码

Gradle dependency

和前端connection and handlers

还有一些关于 HTML5 SSE

的文档