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

问题描述 投票:0回答:4

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

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

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

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

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

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

c# asp.net node.js websocket signalr
4个回答
82
投票

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

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

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


25
投票

其他影响

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

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

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


15
投票

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

Alchemy 项目:开源 C# WebSocket 库

Fleck 项目:开源 C# WebSocket 库

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

在商业产品方面,特别是考虑到 websocket 功能并非在所有浏览器上都可用,我推荐 PokeIn WebSocket 和反向 Ajax 库。从2.0版本开始它内置了WebSocket服务器。详情请参阅这里


0
投票

这是一种非常酷的方式来处理必须实时传输给其他用户的实时消息或数据。我之前确实将它与react.js一起使用过,非常有用。

SignalR 适用于 Polling 和 Websockets,但使用 Polling 并不是一个好主意,因为它会占用大量带宽,并且可能会减慢您的应用程序速度。

在 websockets 上,用户和服务器之间将始终保持打开的连接,该连接是在用户进入应用程序的特定部分时首次建立的。请始终检查连接是否仍处于活动状态,如果由于某种原因连接超时,请重新初始化连接(您可以通过在 js 中每 5 秒使用 setInterval 或其他方式来执行此操作)。然后要注意消息的传播方式,以免发送给错误的人,并注意可访问性(例如,使用 guid 作为特定连接的组 ID)。最后,如果传输的数据至关重要,请使用加密/解密方法。

SignalR 的一大优势是它不使用服务器端的缓存。

© www.soinside.com 2019 - 2024. All rights reserved.