Spring MVC 应用程序中用户之间的消息传递

Posted

技术标签:

【中文标题】Spring MVC 应用程序中用户之间的消息传递【英文标题】:Messaging between users in Spring MVC app 【发布时间】:2013-08-11 10:48:20 【问题描述】:

我使用 Spring MVC 制作 Web 应用程序,并且用户可以相互发送消息。我怎样才能实现这样的功能:当用户在他的消息页面上并且他从其他人那里得到消息时,这条消息会添加到他的消息列表中而不刷新页面。某种推送通知,但我想不出正确的想法,如何实现它。

【问题讨论】:

【参考方案1】:

这里有两点需要考虑; “消息”框架和客户端通知。

通常,“消息传递”框架将被设计/构建为独立于视图层(Spring MVC 部分),并且可能包含可靠的消息传递平台(JMS、AMQP 等)或某些允许事件的服务被推入框架。这允许用户“连接”到彼此独立的 JVM 实例(例如集群 Tomcat 环境或类似环境)。

一个更简单的老派解决方案是使用共享数据库并将消息写入/读取到具有用户标识符的共享表; from=userA,to=userB,message=... 之类的东西,您可以使用轮询机制来检索消息。

在客户端,有许多模式,包括长轮询、ajax、websockets 等,旨在解决这个设计问题。为了融入轮询解决方案,AJAX 定时轮询器(与事件相结合)将允许您通过向服务请求“我(用户 B)是否有任何新消息?”来不断更新页面的一部分。

投票解决方案是“老派”,还有更多选择。深入研究考虑到这一确切挑战而开发的诸如 websockets 之类的主题。 (也看看 Tomcat8 的 websocket 支持)

【讨论】:

我使用 DB 来存储您在第 3 段中提到的消息。所以现在主要的问题是消息发送时如何通知接收方。询问新消息的定时 AJAX 请求似乎不是一个好的解决方案。当控制器收到来自发送者的消息的请求时,是否有可能从控制器向接收者页面发送通知? 从 Spring 3.2 开始,并非如此 - Spring MVC 仍然是一个“反应式”框架,并且 HTTP(WebSocket 等协议除外)已断开连接(没有开放通道来持续向客户端推送更新) .你最好的选择是开始研究长轮询和/或 websocket 解决方案。 (也请留意 Spring 4 - 它有一些不错的更新,例如可能有所帮助的 WebSocket 支持)

以上是关于Spring MVC 应用程序中用户之间的消息传递的主要内容,如果未能解决你的问题,请参考以下文章

thymeleaf 和 spring 控制器之间的值如何传递,反之亦然

请问在.net mvc3.0中,如何在action之间传递参数,切记不能在地址栏中看到

用户之间的 Android 谷歌云消息传递

asp mvc中action跳到另一个action怎么传递参数

用户之间的网站中的消息传递系统

Eclipse 和企业 Web 应用程序之间的 Java Chat(消息传递)