用于asp.net MVC聊天应用程序的signalR vs html5 websockets

Posted

技术标签:

【中文标题】用于asp.net MVC聊天应用程序的signalR vs html5 websockets【英文标题】:signalR vs html5 websockets for asp.net MVC chat application 【发布时间】:2012-02-16 08:14:29 【问题描述】:

我在使用 html5 websockets 或 signalR 进行聊天时陷入两难境地,我们将要集成到我们的 asp.net mvc3 应用程序中

我的困境 1.signalR如果实现了longpolling,为什么要使用? 2.longpolling不好吗? 3.websockets和longpolling完全不同? 4.只有 IIS8 支持 websockets? 5.我可以使用Html5 websockets将聊天数据保存到SQL数据库吗? 6.是否有使 websockets 在 IIS7 和更高版本上工作的解决方法(我将只使用 chrome 浏览器) 感谢您对我的包容

【问题讨论】:

【参考方案1】:

    如果signalR实现了长轮询,为什么还要使用它?

    答案:启用对旧浏览器的支持或对数据传输实现细节进行更高级别的抽象。如果你肯定会使用支持 websockets 的 chrome 版本 - 使用 websockets(很好的解释 here)。

    长轮询不好吗?

    回答:实际上它不是最好的(见上面的链接),但对于旧浏览器来说总比没有好。

    websockets 和 longpolling 完全不同?

    答案:它们完全不同(再次参见上面的答案),但它们有一些共同点(它们都需要连接)。

    只有 IIS8 支持 websockets?

    回答:如果您想使用纯 .NET 框架 - 是的,只有 IIS 8 和 .NET 4.5。但是您可以使用另一个 websockets 服务器(参见下面的解决方法)。

    我可以使用 Html5 websockets 将聊天数据保存到 SQL 数据库中吗?

    Answer:websockets 只是一个发送数据的协议,所以实际上使用它除了传输数据之外你不能执行任何操作。但是,例如,您可以拥有一个将发送到服务器的令牌,这意味着“将所有以前的数据保存到数据库”。或者,您可以根据不同类型的消息(例如在socket.io for node.js 中实现)来处理更复杂的场景。

    是否有使 websockets 在 IIS7 和更高版本上工作的解决方法(我将只使用 chrome 浏览器)

    回答 - 是的,只是不要使用 IIS,但是另一个 websockets 服务器实现(例如 Fleck - 对支持 websecets 的“旧”浏览器有很好的支持)并将它与 IIS 一起作为一个单独的进程运行。

【讨论】:

【参考方案2】:

如果 IIS 和您的浏览器支持,SignalR 可以支持 websockets,否则它使用长轮询。 使用 SignalR 将为您节省大量重新发明***的时间,他们已经证明您可以使用它创建一个好的聊天网站。

【讨论】:

很好,它们支持 websockets..但是大多数情况下 IIS 和浏览器似乎不适合 websockets,所以大多数情况下它将是 longpolling... 所以在大多数情况下没有长时间轮询而不是有一种解决方法可以使 websockets 仅在所有 IIS 和 chrome 上工作......?是的,我在这里看到了演示网络聊天jabbr.net/#/rooms/Lobby 我认为没有一种解决方法可以让 websockets 工作。 iis8 发布后,对 websockets 的支持将迅速增长。【参考方案3】:

希望它能解决您的所有疑问。

【讨论】:

不错,但需要文字而不是图片【参考方案4】:

4.只有 IIS8 支持 websockets?

SignalR 支持带有 Json2.js 的 IE install-package json2

即可

确保在 signalR.js 之前添加对 json2.js 的引用

【讨论】:

IIS8是服务器,IE8是浏览器

以上是关于用于asp.net MVC聊天应用程序的signalR vs html5 websockets的主要内容,如果未能解决你的问题,请参考以下文章

如何将“聊天”集成到 ASP.NET MVC 站点中?

Asp.NET MVC 使用 SignalR 实现推送功能二(Hubs 在线聊天室 获取保存用户信息)

ASP.NET MVC 4 和 WebSockets

用于引导切换的 asp.net 核心 mvc 标签助手

500.22 用于具有子虚拟目录 ASP.NET MVC 应用程序的根 ASP.NET 应用程序上的子目录文件

用于 Mono、MonoTouch 和 ASP.NET MVC 的 ORM