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

我目前有一个 TCP 服务器应用程序写在。接收并向客户端提交消息的 Net。我正在构建一个网络应用程序,所以需要通信层。

我已经构建了一个 Node.JS + Socket.IO 应用程序,它连接到我的 TCP 服务器,然后将通信推送到 Web 应用程序,所有工作都很好。

我刚刚读到 SignalR 是将其保留在.Net 堆栈中的一种替代方法。

然而,我也发现我可以写一个 C # Websocket 服务器,一个基本的演示 给你

我假设这个基本服务器就是 SignalR,但显然它有更多的功能?

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

75826 次浏览

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

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

Fleck Project : 开源 C # WebSocket 库

SignalR 可能不错,但是它需要 WindowsServer8/IIS8来提供 WebSocket 特性。

在商业产品方面,特别是考虑到 WebSocket 特性并不适用于所有浏览器,我建议使用 PokeIn WebSocket 和反向 Ajax Library。从版本2.0开始,它有内置的 WebSocket 服务器。详情可从 给你

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

SignalR 支持浏览器客户端(JS)。NET,Windows Phone 7和 Silverlight。还有一些贡献客户端,比如 iOS,Mono Touch 等等。

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

其他影响

我既使用了这两种技术,也在.NET/节点堆栈的两端工作。

  1. 虽然我现在更喜欢节点端,如果你只在。NET 中,SignalR 是显而易见的选择。相反,如果您在 node 中构建所有项目,我将使用 socket.io 或 袜子。如果您的范围足够窄,不需要担心回退之类的问题,我建议您检查 模块,因为它对于您的依赖更简单、更轻便。过去,socket.io 一直是 Windows 的痛苦之源,因为 node-gyp 无法安装本机依赖关系(Node-gyp需要很多配置步骤,这些步骤根据 Windows 的不同版本而变化很大,但是对于 C + + 本机构建模块来说是必需的)。多亏了 Windows-build-tools,这个 Windows 位不再那么相关了。
  2. 如果您有一个负载平衡器并计划运行 SignalR,则需要将 SQL 或 Redis 设置为背板以绕过负载平衡器。您将在 socket.io 端遇到类似的问题,并且有[多个受支持的方法][1](其中1个也是 redis)。

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