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

Jon*_*Jon 71 c# asp.net websocket node.js signalr

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

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

我刚刚读到有关SignalR作为将其保留在.Net堆栈中的替代方法.

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

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

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

Dam*_*rds 74

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

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

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


cch*_*ain 20

其他影响

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

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

更新 - 删除了jquery信息,因为它不再适用

  • 实际上,SignalR JavaScript客户端库2.2.0(2015年1月发布)支持任何版本的jQuery> = 1.6.4.即你不必复制jQuery版本(无论如何都会破坏).我刚刚验证了使用SignalR JavaScript客户端版本2.2.0和jQuery 2.1.4在Chrome,IE和Firefox中运行的示例聊天应用程序的情况.此外,大多数浏览器很可能都有缓存的jQuery兼容副本. (2认同)

Zuu*_*uum 15

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

Alchemy Project:开源C#WebSocket库

Fleck项目:开源C#WebSocket库

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

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

  • 不是 SignalR 需要 Windows Server 2012,所以这不是它的错。 (2认同)