Node.Js + Socket.IO与SignalR与C#WebSocket服务器


75

我目前有一个用.Net编写的TCP服务器应用程序,用于接收消息并将其提交给客户端。我正在考虑构建Web应用程序,因此需要通信层。

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

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

但是我也发现我可以编写一个C#Websocket Server,一个基本的演示 这里

我以为这个基本服务器就是SignalR,但是显然其中有很多功能吗?

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


1
有关信息,您也可以尝试SuperWebSocket。现在,我只是直接编写了一个WebSocket服务器。只有两个关键协议在起作用(其余实际上是相同的变体),因此它并不庞大。我部分在等待.net 4.5 / win8,其中包括WebSocket服务器支持OOTB。
Marc Gravell

@MarcGravell谢谢。这是一个显示.Net 4.5 Websocket服务器marcinbudny.blogspot.com/2011/10 / ...的帖子,不过我不确定服务器的运行方式。
2012年

1
不要忘了,socket.io做了很多不止的WebSockets,它也不会回落到长轮询等
MTSR

1
@MarcGravell一年后。您更喜欢哪个(在体验vs2012 signalR和node之后)?
罗伊·纳米尔

2
@Royi我将间接回答:我们仍然是自定义套接字服务器,并计划将代码发布为F / OSS
Marc Gravell

Answers:


78

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

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

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


21

其他影响

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

  1. 尽管这些天我更喜欢节点端,但是如果您仅在.NET中工作,SignalR是显而易见的选择。相反,如果您在节点中构建所有项目,则可以使用socket.io或sockjs。如果您的范围足够狭窄,您不必担心后备之类的事情,那么我建议您检查一下ws模块,因为它对您的依赖项更简单,更轻松。过去,由于node-gyp无法安装本机依赖项而导致的安装问题,socket.io在Windows上一直很痛苦(node-gyp需要许多配置步骤,具体取决于您所使用的Windows版本,而C ++却需要如此配置)本机构建的模块)。更新此Windows位不再那么相关了,这要归功于Windows构建工具
  2. 如果您有负载平衡器并且计划运行SignalR,则需要将SQL或Redis设置为背板来绕过负载平衡器。您将在socket.io端遇到类似的问题,并且有[多个受支持的方法] [1](其中1个也是redis)。

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


3
实际上,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副本。
dmcquiggin 2015年

1
对于那些不知道的人,SignalR现在是由Azure提供的一项服务,可以为您管理其可伸缩性方面。他们也有免费的服务。
Shayan C

15

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

炼金术项目:开源C#WebSocket库

Fleck项目:开源C#WebSocket库

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

在商业产品方面,特别是考虑到并非所有浏览器都提供websocket功能,我建议使用PokeIn WebSocket和反向Ajax库。从2.0版开始,它具有内置的WebSocket服务器。可从此处获取详细信息


前面提到的广告,Signalr具有传输后备功能,因此,如果不支持Web套接字(在服务器或客户端上),则它属于其他传输类型,等等
。.– psulek 2013年

2
不是SignalR需要Windows Server 2012,所以这不是它的错。
阿里森
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.