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

我目前有一个用.Net编写的TCP服务器应用程序,它接收并向客户端提交消息。 我正在build设一个Web应用程序,所以需要通信层。

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

我刚刚读到了有关SignalR的一个替代方法,将它保存在.Net堆栈中。

不过,我也发现我可以写一个C#WebSocket服务器, 这里是一个基本的演示

我认为这个基本的服务器是SignalR的,但显然有更多的function呢?

我试图决定的是,我只是追加我的当前TCP应用程序与一个WebSocket服务器,或者我走了一个单独的SignalR或Node.js路线? 出于兴趣SignalR应用程序如何运行,它是作为Windows服务,控制台应用程序还是IIS服务?

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

SignalR支持浏览器(JS),.NET,Windows Phone 7和Silverlight的客户端。 还有iOS,Mono Touch等的客户。

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

一些被忽视的含义

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

  1. 尽pipe现在我更喜欢节点方面,但是如果您只使用.NET,那么SignalR是一个明显的select。 相反,如果您在节点中构build所有项目,我将使用socket.io或sockjs 。 如果你的范围足够狭窄,你不需要担心后备和类似的事情,我build议检查出ws模块,因为它的依赖关系更简单和更轻。 过去,由于node-gyp无法安装本地依赖关系( node-gyp需要许多configuration步骤,这些configuration步骤根据您拥有的Windows版本而不同,这是C ++所必需的)本地构build模块)。 更新由于windows-build-tools,这个Windows位并不那么重要。
  2. 如果您有一个负载均衡器,并计划运行SignalR,则需要将SQL或Redis设置为背板以绕过负载平衡器。 你将会遇到类似的问题在socket.io端处理,并且有[多个支持的方法] [1](其中的一个也是redis)。

更新 – 删除jQuery信息,因为它不再适用

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

炼金项目 :开源C#WebSocket库

斑点项目 :开源C#WebSocket库

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

在商业产品方面,特别是考虑到websocketfunction在所有浏览器上都不可用,我推荐使用PokeIn WebSocket和反向Ajax库。 从版本2.0开始,它具有内置的WebSocket服务器。 详细可从这里