【问题标题】:ASP.NET MVC 5 AJAX - Update chat room when local & remote users postASP.NET MVC 5 AJAX - 本地和远程用户发帖时更新聊天室
【发布时间】:2016-10-03 15:57:03
【问题描述】:

我需要在 ASP.NET MVC 5 中创建一个简单的聊天室。

创建模型、查看模型和使用 AJAX ActionLink 我可以让一个用户轻松地将新数据发布到页面的部分更新区域。我在网上找到了很多这样的例子。

但是,当外部用户也发送消息时,我还需要更新“聊天/消息窗口”。如何将这些事件发送给客户端 - 以及如何通过仅添加外部用户所说的内容(不刷新所有聊天文本)来更新聊天?

谢谢。

【问题讨论】:

  • 你可能想看看SignalR
  • 谢谢 - 你是说在 AJAX 中没有好办法吗?有什么指点吗?
  • SignalR 可以轻松处理这个问题。我之前通过在 JavaScript 中创建一个计时器来实现类似的功能,该计时器每 5 秒左右拉一次,询问端点/控制器是否有新消息。如果是这样,我会在 Json 中收到消息并相应地更新部分消息——我将消​​息保存到数据库中,所以我可以拉取。
  • 你可以像@EddiePaz 提到的那样用纯ajax 来做,但我认为使用已经建立的框架而不是重新发明轮子会更好。

标签: asp.net-mvc asp.net-mvc-5


【解决方案1】:

您可以每隔几秒钟检查一次新消息,但这不是最佳方法,因为它包括不必要的服务器点击。

最好的方法是使用 SignalR,它抽象了您的网络服务器通知连接的客户端的方式,这些客户端可以是浏览器、桌面或移动设备,而这正是 SignalR 真正擅长的地方。

本教程一步一步准确地解释了你需要什么

https://www.asp.net/signalr/overview/getting-started/tutorial-getting-started-with-signalr

【讨论】:

    【解决方案2】:

    如果这是一个简单的聊天室,没有任何“高级”功能,如私人消息等,那么最轻量级的解决方案是使用服务器端事件 (SSE)。

    您可以在此处查看 stackoverflow 文章:"How do server-sent events work with ASP.NET MVC?"

    SignalR 是一个很好的解决方案,但要发挥最佳效果,它需要网络套接字,并非所有托管选项都包括。 SSE 不需要服务器上的任何附加功能。

    【讨论】:

    • 据我了解,SignalR 将优雅地降级为多种技术。
    • 会的,但是还是要包含很多代码,只是为了有个聊天室,如果不需要私信等等。而且SignalR也需要jQuery。
    • 实际上它几乎不需要任何代码——你用过吗?您只需 2 分钟和 5 行代码即可启动并运行 - 重点是节省时间并提高能力。
    • 是的,我有,几年前我用它开发了一个游戏聊天/大厅。无论如何发布这个回复是有意义的,因为还有另一个选项,它可以与 ASP.NET MVC(和 ASP.NET Core,其中 SignalR 尚未准备好)一起使用。
    猜你喜欢
    • 1970-01-01
    • 2015-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-28
    • 2013-05-28
    • 2017-05-31
    • 1970-01-01
    相关资源
    最近更新 更多