1

所以我一直在深入研究 SignalR,它是一种非常简洁的技术,已经成为ASP.NET家族的一部分。我学习了一些教程,这些教程解释了如何构建一些简洁的实时应用程序,例如股票行情、聊天、仪表板和移动对象。

这些基本教程确实展示了框架背后的一些力量。我正在阅读一些文档,其中显示:

  • 联系
  • 集线器

所以基本上你有两种选择来连接你的ClientServer。但是在我偶然发现所有这些文档时,它指出:

SignalR 可以利用连接或集线器;通过绘制一个连接,它将利用 Web 套接字。带有原始套接字的编码,但它是高保真和低延迟的。但正如我所说,这在对 Web Socket 的支持中都存在缺陷,直接对套接字进行编码。

这是有道理的,但随后他描述了Hub工作原理。直接在原始套接字上编码。这是有趣的部分,Hub它将应用以下传输方法:

  • 网络套接字
  • 长池化
  • 服务器发送事件
  • 永远的框架

显然,Hub它非常整洁。因为它确定了最佳的运输方法,然后实施该方法以实现目标。

我的问题为什么你会想要直接编码到套接字,Hub无论如何都会自动选择最好的传输方法。包括Web Socket?

澄清会很好。我不太明白为什么不使用Hub? 为什么要费心使用Connection

4

1 回答 1

3

Patrick Fletcher 在SignalR 简介:连接和集线器中解释了为什么您可能希望使用基于集线器的连接。在所有其他情况下,您应该使用集线器,因为它们为您提供了许多附加功能。这是他写的:

连接与集线器

SignalR API 包含两种用于在客户端和服务器之间进行通信的模型:连接和集线器。

Connection 代表一个简单的端点,用于发送单个接收者、分组或广播消息。Connection API(由 PersistentConnection 类在 .NET 代码中表示)使开发人员可以直接访问 SignalR 公开的低级通信网络。使用过基于连接的 API(例如 Windows Communcation Foundation)的开发人员会熟悉使用连接通信模型。

集线器是建立在连接 API 之上的更高级的管道,它允许您的客户端和服务器直接相互调用方法。SignalR 像魔术一样处理跨机器边界的调度,允许客户端像调用本地方法一样轻松地调用服务器上的方法,反之亦然。如果您的应用程序使用不同类型的消息,建议您使用 Hub 类,这样您就不必创建自己的调度;使用 Hub,您可以调用客户端上的方法,而不是发送需要接收、解释和操作的显式消息。使用过远程调用 API(例如 .NET Remoting)的开发人员会熟悉使用 Hubs 通信模型。

选择沟通模式

大多数应用程序应该使用 Hubs API。Connections API 可用于以下情况:

  • 需要控制发送消息的格式。
  • 开发人员更喜欢使用消息传递和调度模型而不是远程调用模型。
  • 正在移植使用消息传递模型的现有应用程序以使用 SignalR。
于 2013-04-22T23:35:13.000 回答