java - 将 JaxRS REST 服务与 WebSocket 集成

标签 java rest websocket jax-rs publish-subscribe

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

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

My JaxRS app config

RestServices

Web.xml

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

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

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

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

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

我的疑问:

1) 我可以将 Spring Websockets 与我的 JaxRS 服务器“混合”吗?它是如何初始化的?

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

提前致谢

最佳答案

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

这是 SSEProvider 的代码和 SSEDispatcher

Gradle dependency

和前端connectionhandlers

还有关于 HTML5 SSE 的一些文档

关于java - 将 JaxRS REST 服务与 WebSocket 集成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29785258/

相关文章:

java - 我需要一个框架才能使用依赖注入(inject)吗?

api - 基于 REST API 的 SDK - 开销?

websocket - 如何在添加/删除服务器时扩展 websocket 连接负载?

node.js - Node : How to send very large data from server to client

android - 无法验证我的 ACS token

PHP websocket服务器和mysql连接

node.js - 如何获取 websocket 连接的(Express 的)sessionID

java - Quartz & Spring - 集群但不持久?

java - 如何在jsp页面中根据名字显示名字

java - 如何在 Java 中使用 wait()/notify()