2012-09-07 51 views
0

当我们发送一个XMLHttpRequest时,我们总是有数百个额外的字节。在正常使用情况下,这是很好的。但是当构建需要速度的应用程序时,这对可靠性不利。XHR不适合聊天应用程序?

function update(){ 
    var xhr = getXMLHttp(); // Normal catch handler for XHR 
    xhr.open("POST", "update.php?r=" + "&chatvslog=" + user, true); 
    xhr.send(); 
window.setTimeout("update();",300); 
} 

请求结束的确从170到360ms一路发送。问题是我需要更快完成这项工作。

有没有改善我的XMLHttpRequest或该做的另一种方式的一种方式?

+1

您正在寻找网络套接字。 – SLaks

+3

**永不**将字符串传递给'setInterval()'或'setTimeout()'。这样做与使用'eval()'一样糟糕,并且只要使用变量,就会导致不可读和可能不安全的代码,因为您需要将它们插入到字符串中,而不是传递实际变量。正确的解决方案是'setInterval(function(){/ * your code *)},msecs);'。 'setTimeout()'同样适用。如果你只想调用一个没有任何参数的函数,你也可以直接传递函数名:'setInterval(someFunction,msecs);'(注意函数名后面有** no **'()') – ThiefMaster

+0

退房 - 波什http://xmpp.org/about-xmpp/technology-overview/bosh/ –

回答

3

轮询是一个糟糕的解决办法,没有工作的小scalle,但效率不高和丑陋的实现。

现代浏览器都支持WebSockets的是一个更好的办法,让双向通信。随着Node.js的作为一些诸如Socket.IO你甚至可以使用回退到无论是在浏览器中提供一个高层次的WebSocket抽象层 - 它可以使用WebSockets(首选)和技术,如Flash插槽,AJAX长轮询或JSONp长轮询而不必关心使用什么。

+0

如何在不使用XML的情况下发送基本的HTTP请求? – user1431627

+0

仅仅因为它被称为XMLHttpRequest,并不意味着需要涉及XML。 – ThiefMaster