Node.Js + Socket.IO vs SignalR vs C# WebSocket 服务器
Posted
技术标签:
【中文标题】Node.Js + Socket.IO vs SignalR vs C# WebSocket 服务器【英文标题】:Node.Js + Socket.IO vs SignalR vs C# WebSocket Server 【发布时间】:2012-03-02 17:24:40 【问题描述】:我目前有一个用 .Net 编写的 TCP 服务器应用程序,用于接收并向客户端提交消息。我正在考虑构建一个 Web 应用程序,因此需要通信层。
我已经构建了一个 Node.JS + Socket.IO 应用程序,它连接到我的 TCP 服务器,然后将通信推送到 Web 应用程序,一切正常。
我刚刚阅读了有关 SignalR 作为将其保留在 .Net 堆栈中的替代方案。
不过我也发现我可以写一个C# Websocket Server,一个基本的demo here
我假设这个基本服务器就是 SignalR,但显然其中包含更多功能?
我要决定是我只是将我当前的 TCP 应用程序附加到一个 Websocket 服务器,还是我走一个单独的 SignalR 或 Node.js 路由?出于对 SignalR 应用程序如何运行的兴趣,它是作为 Windows 服务、控制台应用程序还是 IIS 服务?
【问题讨论】:
有关信息,您也可以尝试 SuperWebSocket。目前,我只是直接写了一个 WebSocket 服务器。只有 2 个关键协议在起作用(其余的实际上是相同的变体),所以它并不庞大。我部分在等待 .net 4.5 / win8,其中包括 WebSocket 服务器支持 OOTB。 @MarcGravell 谢谢。这是一篇显示 .Net 4.5 Websocket 服务器marcinbudny.blogspot.com/2011/10/… 的帖子,不过我不确定服务器是如何运行的。 不要忘记,socket.io 不仅仅是 websockets,它还回退到长轮询等。 @MarcGravell 一年后。你更喜欢哪个(体验vs2012 signalR和node之后)? @Royi 我将间接回答:我们仍然是我们的自定义套接字服务器,并计划以 F/OSS 的形式发布代码 【参考方案1】:SignalR 与 Socket.IO 类似,支持传输协商/回退。它是一个框架而不是服务器,因此您需要将它托管在某种服务器上。我们有用于 ASP.NET、OWIN(例如 Kayak)和自托管的主机,因此您可以轻松地在自己的进程中运行它,例如Windows 服务。
SignalR 支持浏览器 (JS)、.NET、Windows Phone 7 和 Silverlight 的客户端。 ios、Mono Touch 等也有贡献的客户。
SignalR 将为您提供比原始套接字更高级别的 API,这是它的一大优势,允许您以广播(或目标)方式从服务器到客户端执行诸如“RPC”之类的事情。
【讨论】:
【参考方案2】:其他含义
我使用过这两种技术,并且在 .NET / 节点堆栈的两边都工作过。
-
虽然我现在更喜欢节点端,但如果您只在 .NET 中工作,那么 SignalR 是显而易见的选择。相反,如果您在节点中构建所有项目,我会使用 socket.io 或sockjs。如果您的范围足够窄以至于您不需要担心回退之类的事情,我建议您查看ws 模块,因为它对您的依赖项更简单、更轻。过去,由于 node-gyp 无法安装本机依赖项的安装问题,socket.io 在 Windows 上一直很痛苦(node-gyp 需要许多配置步骤,这些步骤取决于您拥有的 Windows 版本,但对于 C++ 是必需的本机构建的模块)。 更新感谢windows-build-tools,这个 Windows 位不再那么重要了。
如果您有负载均衡器并计划运行 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 副本。 对于那些不知道的人,SignalR 现在作为 Azure 提供的一项服务,由 Azure 为您管理其可扩展性方面。他们还有一个免费的层级可以玩。【参考方案3】:开发可扩展/线程安全的 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
【讨论】:
前面提到的广告,Signalr 有传输回退,所以如果不支持 Web 套接字(在服务器或客户端上)它会落入其他传输类型等等.. 不是 SignalR 需要 Windows Server 2012,所以不是它的错。以上是关于Node.Js + Socket.IO vs SignalR vs C# WebSocket 服务器的主要内容,如果未能解决你的问题,请参考以下文章
Node.js - Socket.io:socket.request 未定义
HTTP 状态代码 200 但页面未加载 Node.js Socket.io -- 使用 Socket.io 的 Node.js 教程,Daniel Nill,fs.readFile(),socket
Node.js socket.io.js 未找到或 io 未定义