我希望得到关于我是否应该每秒使用XMLHttpRequest来检索实时数据或Web套接字的澄清。
我之前曾问过somewhat similar question earlier,虽然这次我觉得我对我的选择有了更好的把握,并希望了解更多。
以前,我的获取代码是这样的:
var fetch = "";
startitall();
function startitall(){
fetch = setInterval(livedata, 1000);
}
function livedata(){
var exhaitch = new XMLHttpRequest();
var exlink = "wheremydatais.com";
exhaitch.onreadystatechange = function(){
if (this.readyState == 4 && this.status == 200){
console.log(JSON.parse(this.responseText));}
}
exhaitch.open("GET", exlink, true);
exhaitch.send();
}
在完成一些阅读后,我了解到这个问题是每次发送数据时呼叫都会关闭,从而使其效率低下。这是通常需要Web套接字的地方,因为它们在有客户端时保持连接打开。
话虽如此,在我之前的问题中,我通过以下代码介绍了解决方案:
function getMyData(){
var exhaitch = new XMLHttpRequest();
var exlink = "wheremydatais.com";
exhaitch.onreadystatechange = function(){
if (this.readyState == 4 && this.status == 200){
console.log(JSON.parse(this.responseText));
getMyData();
}
}
exhaitch.open("GET", exlink, true);
exhaitch.send();
}
我认为这个答案中的想法是在第一个onchange
事件期间运行一个新的调用,使得在不中断关闭连接的情况下获取新数据。
我想知道的是,性能方面,这是否像运行Web套接字一样可行? XMLHttpRequest关闭不会对性能产生影响吗?我还没有关闭并打开每个电话的新连接吗?
我要求确定是否应该更改我的基础架构以实现Web套接字,或者XMLHttpRequest方法是否足够。我不需要双向数据绑定,我的数据大约是600字节。
非常感谢见解。
答案 0 :(得分:1)
答案取决于您的申请要求。
如果您希望用户长时间停留在页面上(大量轮询),或者可能会有许多并发用户,并且您的有效负载仍然相对较小,那么套接字可能就是这样。< / p>
如果您希望用户快速反弹,或者显着增加有效负载大小,最好使用服务器上的专用GET路由进行管理。
我见过大规模,高流量的网站都使用这两种方法,而且我个人使用这两种方法并没有多少问题。如果使用Node.js后端,套接字特别容易设置,并且每个实例可以支持超过250,000个并发连接。