Spring 4 Web 套接字 - 我必须有一个 stomp 代理吗?

Posted

技术标签:

【中文标题】Spring 4 Web 套接字 - 我必须有一个 stomp 代理吗?【英文标题】:Spring 4 Web sockets - Do i must have a stomp broker? 【发布时间】:2014-04-24 16:58:18 【问题描述】:

我一直在使用以下链接来玩新的 spring 4 websockets:

http://spring.io/guides/gs/messaging-stomp-websocket/

我想知道是否必须使用 stomp 代理才能使用 spring 框架?有没有经纪人少的方法来使用它?

谢谢

【问题讨论】:

【参考方案1】:

本指南使用 Spring Framework 中提供的simple broker implementation。它只是一段 Java 代码,在那个设置中没有真正的代理。所以是的,有一种无需代理的方式来使用它,而且您已经在这样做了。

虽然此实现缺少许多功能,但您可能希望在生产中使用真正的代理(如 RabbitMQ)。

编辑:

您不必必须使用 STOMP 和消息代理,实际上您可以直接使用 Websocket API。如this presentation中所述:

直接使用 WebSocket API 有点像编写自定义 Servlet 应用程序,但 WebSocket 协议的级别低于 HTTP。

根据您的应用目标,您可能会选择消息驱动的应用程序;靠自己解决不是一件容易的事...

【讨论】:

是的,我知道,但是是否可以在没有任何 stomp 代理的情况下使用带有 spring 的 websocket?或者当您选择使用带有 websockets 的 spring 时,Stomp 是强制性的? @Urbanleg 不,它不是强制性的,如果你想使用 stomp,它是可选的。 Stomp 是一个更高级别的协议,因此您不需要为 websocket 处理低级别的会话处理。 但是如果我想使用 stomp 但不提供消息代理怎么办?我想自己提供接口来处理 stomp 事件,而不是依赖消息代理【参考方案2】:

我建议不要使用 STOMP,因为它需要在您的代码中嵌入一个框架。框架来来去去,需要更新。

您可以使用 Spring(引导)WebSocket 通道来传递 JSON,而无需使用 STOMP。如果您正在使用前端应用程序(例如 javascript),JSON 已经是您的“模型”数据,可以轻松地双向传递/解析。

WebSocket API 包含的内容足以让您实现 onConnect()、onMessage()、onError()。其实我更喜欢这个,因为我可以控制。例如在 onConnect 中,您可以验证令牌并自定义安全性。

【讨论】:

以上是关于Spring 4 Web 套接字 - 我必须有一个 stomp 代理吗?的主要内容,如果未能解决你的问题,请参考以下文章

Spring 4 websocket + stomp + rabbitmq 和集群

Spring Boot - 我将如何实现 Web 套接字来制作一个简单的聊天系统?

向现有 Spring 应用程序添加 Web 套接字支持

Spring引导Web套接字,无需向特定用户发送消息

从 Spring Boot Web 应用程序中的 Web 套接字获取数据

Spring Boot Web Socket RabbitMQ 不可用