2

我想开发一个 Web 应用程序,其中客户端调用服务器上的服务来执行一些涉及一些处理的操作。服务器将进行所有必要的处理,当更新的数据准备好时,它将将该数据推送到客户端。目前我正在考虑两种方法: - 1. 使用带有 SignalR 的 ASP.NET WEB API 2. 在 .NET 4.5 中使用带有 WCF 的 WebSockets。

我的服务器将在 Windows Server 2012 上,但我的大多数客户端将是 IE 9,我认为它不支持 WebSockets。

正如 SignalR 文档中所写,如果不存在 WebSockets 支持而不更改应用程序代码,它会自动落入长轮询。.NET 4.5 中的 WebSockets 是否也支持这一点,或者我必须手动完成。表示我是否必须在服务器上同时实现 Pull 方法和 push 方法。

请指导我,我将采用哪种方法。

在以后的用例中,我想使用 PhoneGAP 构建这个 Web 应用程序,以创建适用于 iOS、Android 和 Windows Phone 的移动应用程序。

4

3 回答 3

9

WebSockets 不会退回到长轮询(这实际上没有意义)。SignalR 是对 http 传输的更高级别的抽象,这就是它执行回退和其他事情的原因(例如通过连接提供一个很好的编程模型)。

如果您选择在 ASP.NET 上使用 websockets(不确定 WCF),您将针对原始套接字进行编程(这意味着读取/写入数组段等)并且很难做好。如果 websockets 在客户端或服务器上不可用,SignalR 会为您执行此操作,并将回退到其他几种传输方式(永久帧、服务器发送事件、长轮询)。

关于客户端,如果您选择使用 SignalR,则需要使用 SignalR 客户端。我们仅支持 javascript 和 .NET(silverlight、windows phone 8、winrt、.NET 4 和 .NET 4.5)。有些人为包括 iOS 和 Android 在内的其他平台编写了客户端,但我们不维护它们,所以我无法说明它们的最新程度。

我建议你使用 SignalR,这样你就可以专注于你的应用程序逻辑,而不是搞乱 websocket 的低级编程模型。

于 2013-03-25T09:24:28.720 回答
1

我可以确认后备自动运行。如果不能使用 websockets 传输,将使用 ServersentEvents 传输..等等..最后一个传输协议是长轮询。

我们的 SignalR 服务器是一个 .NET 4.5 框架应用程序,托管在一个 ASP.NET MVC 应用程序中,使用 Windows 2012 服务器上的 4.5 dll。应用程序池是 ASP.NET 4.0。

  • Windows 8 或 Windows 2012 服务器上的 .NET 4.5 客户端似乎使用 websockets。
  • Windows 7 机器上的相同 .NET 客户端(即使安装了框架 4.5)会自动回退到服务器发送的事件传输。

在浏览器上使用 Signalr javascript 客户端时,会发生类似的事情:

  • 支持 websockets 的 Chrome/Safari/其他浏览器似乎使用 websockets。
  • 不支持 websockets 但版本相对较晚的 IE/其他浏览器似乎使用 serverentevents。

从经验来看,serversentevents 并不是很糟糕,因此如果没有使用 websockets,请不要犹豫,当然也不要将其作为反对使用 signalR 的唯一因素,因为它的好处很多。

希望这可以帮助。

于 2013-03-27T05:27:48.807 回答
1

您可以从 ASP.NET 教程http://www.asp.net/signalr/overview/getting-started/tutorial-getting-started-with-signalr开始

在本教程之后,您将了解有关 SignalR 需要了解的所有基本知识

于 2013-03-25T07:13:06.133 回答