78

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

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

我刚刚阅读了有关 SignalR 作为将其保留在 .Net 堆栈中的替代方案。

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

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

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

4

3 回答 3

78

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

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

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

于 2012-03-05T20:39:13.897 回答
23

其他影响

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

  1. 虽然这些天我更喜欢节点端,但如果你只在 .NET 中工作,那么 SignalR 是显而易见的选择。相反,如果您在节点中构建所有项目,我会使用 socket.io 或sockjs。如果您的范围足够窄以至于您不需要担心回退之类的事情,我建议您查看ws模块,因为它对您的依赖项更简单、更轻。过去,由于 node-gyp 无法安装本机依赖项的安装问题,socket.io 在 Windows 上一直很痛苦(node-gyp需要许多配置步骤,这些步骤根据您拥有的 Windows 版本而有很大差异,但对于 C++ 是必需的本机构建的模块)。更新这个 Windows 位不再那么重要了,这要归功于窗口构建工具
  2. 如果您有负载均衡器并计划运行 SignalR,则需要将 SQL 或 Redis 设置为背板以绕过负载均衡器。您将在 socket.io 端处理类似的问题,并且有 [多种支持的方法][1](其中 1 个也是 redis)。

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

于 2015-03-15T01:34:38.263 回答
15

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

Alchemy 项目:开源 C# WebSocket 库

Fleck 项目:开源 C# WebSocket 库

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

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

于 2012-03-05T17:55:19.130 回答