将 JaxRS REST 服务与 WebSocket 集成
Posted
技术标签:
【中文标题】将 JaxRS REST 服务与 WebSocket 集成【英文标题】:Integrating JaxRS REST service with WebSockets 【发布时间】:2015-04-21 23:54:56 【问题描述】:我正在尝试开发一个实现发布者订阅模式的社交网络(有点像 Twitter 所做的):用户可以关注人们,因此当他们的关注者的新出版物被发送时会收到通知。
我现在只有一个用 JaxRS 实现的工作 REST 服务,运行在 Tomcat 7 上,提供登录、注册、获取配置文件数据和提交帖子的服务。 Servlet Mapping 是通过 web.xml 完成的
My JaxRS app config
RestServices
Web.xml
但应用程序的权重来自发布订阅部分。这就是事情变得混乱的地方。
在谈到技术和实现之前,这个 pubsub 的生命周期:
让 A 和 B 成为应用程序的一些用户,A 跟随(订阅)B。
-
A 导航到他的“时间线”,因此在服务器中注册了一个 WebSocket 端点,当他订阅的任何人发布任何内容时,他将从该端点接收通知。 (A,他自己会成为话题吗?)
B 发布一个新帖子,它通过 HTTP POST /post 发送到 JaxRS 服务。
服务器将发布存储在数据库中,然后通过 WebSocket 将其发送给监听订阅者。由于 A 处于活动状态并正在侦听,因此通过他的 WebSocket/topic 发送发布。
A 收到有关新出版物的通知。
我曾使用过 Java 内置 WebSockets (javax.websocket)、Spring websockets(通过 STOMP)和内置的 javascript 和 SockJS。我知道 JaxRS 有一些称为服务器发送事件的东西,它的作用类似于 websocket,但我完全不知道如何初始化和使用它们。
我的疑惑:
1) 我可以将 Spring Websockets 与我的 JaxRS 服务器“混合”吗?如何初始化?
2) 使用 JaxRS 和 SSE,我可以在服务器上动态创建 WS 端点吗?
提前致谢
【问题讨论】:
不是完整的答案,但您可能需要顶一下 Atmosphere,它支持 1) 和 2) github.com/Atmosphere/atmosphere。看看goo.gl/s7OwGc 哦,很好,去试试,如果我能解决它会回复,谢谢! 【参考方案1】:最后使用 Jersey 的服务器发送事件做了一个解决方法,虽然 IE 不支持,但可以满足我的需要
这是SSEProvider 和SSEDispatcher 的代码
Gradle dependency
还有前端connection和handlers
还有一些关于html5 SSE的文档
【讨论】:
值得一提的是,IE 支持使用 polyfill,例如here 或 here以上是关于将 JaxRS REST 服务与 WebSocket 集成的主要内容,如果未能解决你的问题,请参考以下文章
CORS 策略已阻止从源“http://localhost:3000”访问“http://localhost:9900/jaxrs-post-example/rest/customers”获取