我正处于一个项目中,我需要连接到客户端的服务器并检索某些图形的数据。
客户希望这是实时的东西(他们有一个正在监听连接并不断提供数据的脚本)。
我的一个大问题是,我不认为这可以在IE中完成,就像在Firefox或Chrome中一样简单。 Firefox和Chrome都支持网络套接字,所以我认为我可以制作一些能够满足客户需求的东西。
在IE中,我能做到这一点的唯一方法是使用带有ajax调用的setTimeout。
IE还有其他选择吗?
现在我们正在使用jquery .ajax()并为readyState == 3处理服务器响应的onReadystageChanged事件设置回调。但这不能按预期工作,因为连接在第一个响应后关闭
此外,我使用IIS作为代理和URL重写规则,因为我们正在使用跨域服务。但是此模块使用至少1KB的缓冲区会破坏服务器响应。这些服务是由另一家公司创建的,该公司不会在其服务器中实施CORS规范。
我如何解决这个问题并在没有缓冲的情况下收到响应?
谢谢
答案 0 :(得分:1)
您可以使用长轮询和服务器端承诺来代替WebSockets。
在服务器上,您可以暂停http请求,使其以异步方式工作。
示例jQuery :
poll();
function poll(){
$.ajax({
url : "http://my-own-domain.com/data/",
success : function(data) {
//do what you want with data
poll();
},
error : function(data) {
poll();
}
});
}
服务器端示例:
WSRequest req = WS.url("http://the-other-domain.org/data/");
Promise<HttpResponse> respAsync = req.getAsync();
HttpResponse resp = await(respAsync);
renderJSON(resp.getString());
对于服务器端,请查看Play! Framework Async以了解如何完成此操作。