将 Signal R 合并到现有的 Web 应用程序中

Posted

技术标签:

【中文标题】将 Signal R 合并到现有的 Web 应用程序中【英文标题】:Incorporating Signal R into an already existing web application 【发布时间】:2015-05-31 01:59:11 【问题描述】:

据我了解,信号 R 的美妙之处在于它负责客户端和服务器之间的“握手”,以确定它们之间的最佳通信形式(websocket、长轮询等)。我知道默认情况下它在 /signalr 路由上执行此操作。我读到在此之前,握手将通过 HTTP Get 请求完成,该请求带有一个 Upgrade/Connection 标头,指定升级到这个新连接。

在我当前的应用程序中,我们支持以 RESTful 方式处理许多 HTTP 请求。如果我们想要实时而不是以这种请求响应格式公开这些数据,那么确定是否应该使用信号 R 打开连接的最佳方法是什么?检查这些标题是否仍然足够?我只是觉得这有点多余,因为信号 R 将其抽象掉了。

如果不是这样,解决方案是让客户端在连接到正确的端点后立即专门调用集线器方法来启动流式传输?

TLDR:需要一种从 HTTP 请求打开信号 R 连接的方法,不知道最好的方法是使用自定义 HTTP 标头请求资源还是仅导航到 url 资源和让他们的客户调用一个 hub 方法。

【问题讨论】:

据我了解,signalr允许Server端调用client端函数,而使用http request/response是无法做到的。 可能有误会:服务器不是发起连接的,这是客户端的部分。 【参考方案1】:

使用信号器的一个典型例子是:

    在页面加载时使用 javascript 连接到信号服务器的 html 文件。我们称之为信号器客户端。

    用 c# 编写的信号器服务器。它可以是 Winform 或控制台或服务。

    signalr Server 可以调用位于同一服务器,甚至不同服务器中的任何 dll,或 webservices 或 webapi。

然后,客户端可以调用信号器服务器中定义的任何函数。服务器可以为特定客户端或客户端组调用客户端中定义的任何函数。

此外,客户端 x 也可以调用客户端 y 函数。

我还建议您在 Cordova 项目中创建此 index.html,以便您的客户可以使用任何 PC 桌面浏览器或任何手机浏览器使用此应用程序,或者将其作为 android 或 iPhone 原生应用程序运行,通过使用一组客户端代码。

【讨论】:

不回答有关在客户端代码未知且通过 http 请求与服务交互的现有项目中使用信号 r 的最佳实践的问题 您在客户端使用什么技术,html 或 aspx 或 php 或 winform? 这才是关键。我们不知道客户端将使用什么技术,我们只想指定他们通常也会发送 http 请求的 url 路由,但我们会告诉他们需要实现的集线器方法。因此,我们希望使用信号 r 打开一个套接字连接,而不是通常发送一个 http 请求来获取一条信息。 首先,我假设你想在客户端发送请求之前让客户端做一些事情,否则你不需要使用signalr。例如实时显示股市信息。在这种情况下,客户端需要创建一个函数供信号器服务器调用。您应该通过向您的客户提供示例代码来标准化此客户端功能。 然而,signalr 并不适合所有类型的客户端技术。例如,如果客户端有 10 个从 A.html 到 J.html 的 html 文件,假设 A.html 文件是包含信号器客户端代码的文件,当打开 A.html 时,它会连接到您的信号器服务器,但是当客户端移动到 B.html 或任何其他 html,连接立即结束!【参考方案2】:

如果他们导航到某个 url 资源而不是接收正文中带有 json 的响应,我们希望他们使用信号 r 不断实时地接收数据

我认为这对于 SignalR 是不可能的。原因是所有 SignaR 通信都是通过单一路由完成的 (xxx.xxx.xxx.xxx/signalR) + 所有 SignaR 连接都是使用 handshake 建立的(通过客户端发送 negotiate 请求到这条路线。也许不是全部 - 如果您使用特定传输初始化 SignalR 连接对象,则不确定是否正在进行协商)。

【讨论】:

以上是关于将 Signal R 合并到现有的 Web 应用程序中的主要内容,如果未能解决你的问题,请参考以下文章

将角色属性添加到现有的 MVC 5 Web 应用程序

将 jQuery 集成到现有的 ASP.NET Web 应用程序中?

如何将 Web API 添加到现有的 ASP.NET MVC (5) Web 应用程序项目中?

将 react-native-web 添加到现有的 react-native 应用程序时出错

将 Worklight 应用程序添加到现有的本机应用程序

将 Angular 和 .net core web api 安全地集成到现有的 MVC 5 应用程序中