我想开发一个web应用程序,其中客户端调用服务器上的服务来做一些涉及一些处理的操作。服务器将完成所有必要的处理,当更新的数据准备好时,它将把该数据推送到客户端。目前我正在考虑两种方法:-1. 使用ASP。. NET WEB API与SignalR2. 在。net 4.5中使用WebSockets和WCF。
我的服务器将在Windows server 2012上,但我的大部分客户端将是ie9,我认为不支持WebSockets。
正如SignalR文档中所写的,如果WebSockets支持不存在而不改变应用程序代码,它会自动落在长轮询。这是否也支持WebSockets在。net 4.5或我必须手动做。意味着我是否必须在服务器上实现拉方法和推方法。
请指引我,我要走哪条路。
在后面的用例中,我想使用PhoneGAP构建这个web应用程序来创建iOS, Android &Windows Phone .
WebSockets不退回到长轮询(这真的没有意义)。SignalR是对http传输的更高层次的抽象,这就是为什么它做回退和其他事情(比如在连接上提供一个很好的编程模型)。
如果你选择在ASP上使用websockets。NET(不确定WCF),你将针对原始套接字编程(这意味着读取/写入数组段等),并在这方面做得很好是困难的。SignalR为你做这些,如果websockets在客户端或服务器上不可用,它会回退到其他几个传输(永久帧,服务器发送事件,长轮询)。
关于客户端,如果你选择使用SignalR,你需要使用SignalR客户端。我们只支持javascript和。net (silverlight, windows phone 8, winrt,。net 4和。net 4.5)。有些人写了其他平台的客户端,包括iOS和Android,但我们不维护他们,所以我不能说他们有多最新。
我建议您使用SignalR,这样您就可以专注于您的应用程序逻辑,而不是与websockets的低级编程模型混淆。
您可以从ASP开始。. NET教程http://www.asp.net/signalr/overview/getting-started/tutorial-getting-started-with-signalr
在本教程之后,您了解了有关SignalR
我可以确认回退会自动工作。如果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客户端,会发生类似的事情:
- Chrome/Safari/其他支持websockets的浏览器似乎使用websockets。
- IE/其他不支持websockets的浏览器,但相对较晚的版本似乎使用了serversentevents
从经验来看,serversenteevents并不是很糟糕,因此,如果websockets没有被使用,不要推迟,当然也不要把它作为反对使用signalR的唯一因素,因为它有很多好处。