当我使用 onreadystatechange 时服务器崩溃

发布于 2025-01-08 09:16:38 字数 1942 浏览 0 评论 0原文

我正在尝试为我的网站创建聊天。

为了加载新数据,我每隔 1.5 英寸运行一个函数。

如果我使用异步模式,我的网站速度很快,我的服务器不会崩溃,但浏览器会冻结直到响应。

当我使用同步模式时,我的服务器在一段时间后崩溃,我必须重新启动 Apache(!?)。

我认为我请求了太多数据并且我的(虚拟)服务器崩溃了,但为什么在异步模式下工作正常?

function loadchat() {
    xmllive.open('GET','live.php', false);
    xmllive.send(null);
    myelemen('dcdd').innerHTML = xmllive.responseText;
}

function loadchatv() {
    xmllive.onreadystatechange=function() {
        if (xmllive.readyState==4 && xmllive.status==200){
        myelemen('dcdd').innerHTML = xmllive.responseText;
    }
}

xmllive.open('GET','live.php', true);
xmllive.send();

谢谢你的回答,MMM。自从您回复以来,我阅读了您的建议。 (http://dsheiko.com/weblog/websockets-vs-sse-vs-long-polling)。

我认为,在长池中,服务器会进行循环,直到找到新数据,然后浏览器才会接收并发出新请求。

那么,请告诉我,您对此解决方案有何看法(简化):

/////////// html file //////////////

<script type="text/javascript" charset="utf-8">

var xmlff;
if (window.XMLHttpRequest) {
    xmlff=new XMLHttpRequest();
} else {
    xmlff=new ActiveXObject("Microsoft.XMLHTTP");
}

   function waitForMsg(){
    xmlff.onreadystatechange=function() {
        if (xmlff.readyState==4 && xmlff.status==200){
            document.getElementById('messages').innerHTML = xmlff.responseText ;
             setTimeout('waitForMsg()', 1000 );
        }
    }
    xmlff.open('GET','msgsrv.php' ,true);
    xmlff.send();
}

</script>
</head>
<body>
    <div id="messages">
    </div>

<script type=text/javascript>
waitForMsg()
</script>
</body>
</html>

////// / php 文件 ///////////

<?

do {
    sleep(3);
    $result = mysql_query("SELECT message FROM chat ");
    while ($row = mysql_fetch_array($result)){
        $msg .= $row[0];
    }

} while (mysql_num_rows($result) == 0);


    header("HTTP/1.0 200");
    print $msg;

?>

提前致谢。

I am trying to create a chat for my website.

To load the new data, i run a function every 1.5''.

If i use asynchronous mode, my website is fast, my server does not crash, but browser freezes until the response.

When i use synchronous mode, my server crashes after a while, and i have to restart Apache (! ?).

I thought that i was requesting too much data and my (virtual) server crashes, but why in asynchronous mode works fine ?

function loadchat() {
    xmllive.open('GET','live.php', false);
    xmllive.send(null);
    myelemen('dcdd').innerHTML = xmllive.responseText;
}

function loadchatv() {
    xmllive.onreadystatechange=function() {
        if (xmllive.readyState==4 && xmllive.status==200){
        myelemen('dcdd').innerHTML = xmllive.responseText;
    }
}

xmllive.open('GET','live.php', true);
xmllive.send();

Thank you for your answer, MMM. Since your response, i read about your suggestions.
(http://dsheiko.com/weblog/websockets-vs-sse-vs-long-polling).

I figured that, in Long Pooling the server makes a loop until finds new data and only then browser receives and makes a new request.

So, tell me please, what do you think about this solution (simplified):

/////////// html file //////////////

<script type="text/javascript" charset="utf-8">

var xmlff;
if (window.XMLHttpRequest) {
    xmlff=new XMLHttpRequest();
} else {
    xmlff=new ActiveXObject("Microsoft.XMLHTTP");
}

   function waitForMsg(){
    xmlff.onreadystatechange=function() {
        if (xmlff.readyState==4 && xmlff.status==200){
            document.getElementById('messages').innerHTML = xmlff.responseText ;
             setTimeout('waitForMsg()', 1000 );
        }
    }
    xmlff.open('GET','msgsrv.php' ,true);
    xmlff.send();
}

</script>
</head>
<body>
    <div id="messages">
    </div>

<script type=text/javascript>
waitForMsg()
</script>
</body>
</html>

/////// php file ///////////

<?

do {
    sleep(3);
    $result = mysql_query("SELECT message FROM chat ");
    while ($row = mysql_fetch_array($result)){
        $msg .= $row[0];
    }

} while (mysql_num_rows($result) == 0);


    header("HTTP/1.0 200");
    print $msg;

?>

Thanks in advance.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文