Welcome

首页 / 软件开发 / .NET编程技术 / .NET的WebSocket开发包比较

.NET的WebSocket开发包比较2015-12-31 cnblogs Realm_King本文出现在第三方产品评论部分中。在这一部分的文章只提供给会员,不允许工具供应商用来以任何方式和形式来促销或宣传产品。请会员报告任何垃圾信息或广告。

Web项目常常需要将数据尽可能快地推送给客户,必要时无需等待客户端请求。对于与用户之间进行实时通信的网站,例如在线交流或文档协作工具,或者在长期运行的计算/执行任务的服务器上更新系统状态,等等这些时候,采用双向沟通机制是理想的。

以前,这类问题一般使用下面的解决方案:

使用 Flash 中的 Socket 连接(http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/net/Socket.html)

Ajax 长轮询(https://gist.github.com/jasdeepkhalsa/4353139)

服务器发送事件... (http://en.wikipedia.org/wiki/Server-sent_events)

...或者就用 IE 中经典的 Frame 技术(http://cometdaily.com/2007/11/05/the-forever-frame-technique/)

但现在我们有了更好的选择:WebSocket。它的标准在2011年发布,在现代浏览器上已实施了一段时间。它更好的原因是使用更安全和更成熟的协议,带来了改进和升级。

略注:

这份比较是几个月前做的,可能不够及时,但如果有人要找好的WebSocket库,我认为这对他仍然是有用的。

本比较只针对以 NuGet 包形式发布的库, SuperWebSocket 虽然使用 NuGet 的 repository,但需要从网页中下载。

也许等我抽出空来,我会使用新的库或已测试的库的新版本进行比较然后更新这篇文章。

Fleck

https://github.com/statianzo/Fleck

我发现这个库真的是简单易用,对于库、文档、例子等都是,只要添加库,复制几行例子里的代码,然后运行——就这么简单。

但是简单是有代价的:其功能并不强大,且可配置的地方太少。

private static void Main(string[] args){ var server = new WebSocketServer("ws://localhost:8181"); server.Start(socket => {socket.OnOpen = () => OnOpen(socket);socket.OnClose = () => OnClose(socket);socket.OnMessage = m => OnMessage(socket, m); });}
对于简单快速的项目我会用它,如果你不需要用WebSocket发送太复杂的数据结构、命令一样的消息、或在客户端无WebSocket支持时的备选方式,这就是你要的了。

优点:

简单

无依赖项

缺点:

可配置项少

客户端浏览器不支持WebSocket时就没戏了

SignalR

http://www.asp.net/signalr

微软出品是我认为这个库最大的优点了。它已经和现有的ASP.NET框架做了集成,对服务器端和客户端代码都做了很好的抽象类, 这意味着你不需要太深入了解协议的东西。然后它还可以很聪明地在客户端浏览器不支持WebSocket时自动使用别的通信机制。它还可以完成一些叫远程过程调用(RPC)的东西,从服务器到客户端。