Web サイト用のチャットを作成しようとしています。
新しいデータをロードするには、1.5 インチごとに関数を実行します。
非同期モードを使用すると、Web サイトは高速で、サーバーはクラッシュしませんが、応答があるまでブラウザーがフリーズします。
同期モードを使用すると、しばらくするとサーバーがクラッシュし、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)。
Long Pooling では、サーバーが新しいデータを見つけるまでループを作り、それからブラウザが新しいリクエストを受信して作成することを考えました。
それで、教えてください、この解決策についてどう思いますか(簡略化):
/////////// htmlファイル //////////////
<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;
?>
前もって感謝します。