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

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

【问题讨论】:

    标签: java spring spring-mvc web websocket


    【解决方案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 支持)
    猜你喜欢
    • 2021-11-28
    • 1970-01-01
    • 2012-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-24
    • 2014-04-29
    • 1970-01-01
    相关资源
    最近更新 更多