Node.Js + Socket.IO vs SignalR vs C#WebSocket Server

时间:2012-03-02 17:24:40

标签: c# asp.net node.js websocket signalr

我目前有一个用.Net编写的TCP服务器应用程序,它接收并向客户提交消息。我正在寻找构建Web应用程序,因此需要通信层。

我已经构建了一个Node.JS + Socket.IO应用程序,它连接到我的TCP服务器,然后将通信推送到Web应用程序,一切正常。

我刚刚阅读了有关SignalR的替代方法,将其保存在.Net堆栈中。

但是我也发现我可以写一个C#Websocket服务器,一个基本的演示here

我认为这个基本服务器就是SignalR,但显然有更多的功能吗?

我想要决定的是,我只是将当前的TCP应用程序附加到Websocket服务器上,还是单独使用SignalR或Node.js路由?感兴趣的是,SignalR应用程序如何运行,是作为Windows服务,控制台应用程序还是IIS服务?

3 个答案:

答案 0 :(得分:72)

SignalR与Socket.IO类似,它支持传输协商/回退。它是一个框架而不是服务器,因此您需要在某种服务器上托管它。我们有ASP.NET,OWIN(例如Kayak)和自托管的主机,因此您可以轻松地在自己的流程中运行它,例如Windows服务。

SignalR支持浏览器(JS),.NET,Windows Phone 7和Silverlight的客户端。 iOS,Mono Touch等也为客户提供了支持。

SignalR将为您提供比原始套接字更高级别的API,这是它的一大优势,允许您以广播(或目标)方式从服务器到客户端执行“RPC”等操作。

答案 1 :(得分:19)

其他影响

我已经使用这两种技术并在.NET /节点堆栈的两端工作。

  1. 虽然我现在更喜欢节点方面,但如果你只使用.NET,那么SignalR是显而易见的选择。相反,如果您在节点中构建所有项目,我将使用socket.io或sockjs。如果您的范围足够窄,以至于您不必担心回退等问题,我建议您查看ws模块,因为它对您的依赖项更简单,更轻松。在过去,socket.io在Windows上一直很痛苦,因为node-gyp的安装问题无法安装本机依赖项(node-gyp需要许多配置步骤,这些步骤根据您拥有的Windows版本而有所不同,但是需要用于C ++本机构建的模块)。 更新由于windows-build-tools,此Windows位不再具有相关性。
  2. 如果您有负载均衡器并且计划运行SignalR,则需要将SQL或Redis设置为背板以绕过负载均衡器。您将在socket.io方面处理类似的问题,并且[支持多种方法] [1](其中1个也是redis)。
  3. 更新 - 删除了jquery信息,因为它不再适用

答案 2 :(得分:15)

开发可伸缩/线程安全的TCP服务器可能不是一件容易的事。另一方面,互联网上有非常好的资源,以便开始自己的。例如,如果您只是在寻找一些不错的开源WebSocket项目,我的建议是;

Alchemy Project:开源C#WebSocket库

Fleck Project:开源C#WebSocket库

SignalR可能不错,但它需要Windows Server 8 / IIS 8才能提供WebSocket功能。

在商业产品方面,特别是考虑到websocket功能并非在所有浏览器上都可用,我推荐使用PokeIn WebSocket和反向Ajax库。从2.0版开始,它具有内置的WebSocket服务器。详情可从here

获取