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

时间:2015-05-31 01:59:11

标签: c# rest http websocket signalr

根据我的理解,信号R的美妙之处在于它能够处理"握手"在客户端和服务器之间确定它们之间的最佳通信形式(websockets,长轮询等)。据我所知,默认情况下它在/ signalr路径上执行此操作。我在此之前读过,握手将通过HTTP Get请求完成,升级/连接头指定升级到这个新连接。

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

而不是这样,客户端是否可以在连接到正确的端点后专门调用集线器方法启动流式传输?

TLDR:需要一种方法来打开来自HTTP请求的信号R连接,不知道最好的方法是通过自定义HTTP标头请求资源还是只导航到网址资源并让客户端调用集线器方法。

2 个答案:

答案 0 :(得分:1)

使用signalr的典型示例是:

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

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

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

  4. 然后,客户端可以调用signalr服务器中定义的任何函数。服务器可以调用客户端中为特定客户端或客户端组定义的任何功能。

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

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

答案 1 :(得分:1)

如果他们导航到某个url资源而不是在其身体中接收带有json的响应,我们希望他们能够使用信号r接收数据来实时实时

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