我见过signalR vs html5 websockets for asp.net MVC chat application但它并没有100%回答我的问题,因为它基于HTML5 WebSockets,微软可能已经在.NET 4.5中使用他们的WebSocket对象进行了扩展。
我想知道WebSocket功能是否确实与SignalR完全相同,并且在WebSocket不可用时又回退到长轮询?当然,微软会采用与SignalR相同的技术来实现这项技术吗?
编辑:
对于其他任何想知道这一点的人,我发现这条评论最有助于理解这个场景以及为什么我会使用SignalR:
嗯,他们不是真的。到目前为止IIS和ASP.NET没有 任何内置在支持的WebSockets中的东西,所以SignalR项目必须这样做 自己建立。现在微软正在提供管道 SignalR可以轻松切换到使用Microsoft的实现, 要么是自己的,要么是自己的。 SignalR是一个 抽象超过实现细节,WebScockets类就是 实施细节
答案 0 :(得分:37)
我认为SignalR是要走的路,并且无论如何都将成为.NET本身的一部分(并且可能扩展/合并/替换web-socket支持)。它在支持时使用Web套接字,并且在不支持的情况下使用一致的客户端轮询黑客,因此,这是最佳选择。
<强>更新强>
由于这个答案仍然被提升,值得一提的是SignalR现在正式成为ASP.NET的一部分。
更新:.NET Core
正如@yazanpro在评论中指出的那样,SignalR也被添加到.NET Core中。答案 1 :(得分:25)
我想知道WebSocket功能是否确实与SignalR完全相同,并且在WebSockets不可用时又回退到长轮询?
WebSockets是一种独立于其他通信技术的新协议。来自RFC
该技术的目标是提供基于浏览器的机制 需要与服务器进行双向通信的应用程序 不依赖于打开多个HTTP连接(例如,使用 XMLHttpRequest或s和长轮询)。
当然,微软会采用与SignalR相同的技术来实现这项技术吗?
如果他们想要符合规范他们不会。当然,没有什么可以阻止微软开发类似于SignalR的更高级别的API,这样可以抽象出通信细节并提供优雅的回退。然而,假设的API可能建立在WebSocket类之上而不是替换它。
答案 2 :(得分:8)
SignalR使用OWIN,如果浏览器支持Web套接字,则使用WebSockets连接;如果浏览器不支持WebSockets,则使用长轮询。