ajaxを使ってチャットアプリケーションを書きたいです。したがって、100ミリ秒(0.1秒)ごとにデータベースのユーザーメッセージテーブルを確認する必要があります。setTimeOutを使用して100ミリ秒ごとにajaxを呼び出す場合、問題はありますか?パフォーマンスの問題はありますか?落とし穴か何か?
3 に答える
これは非常に悪い考えです。ローカルマシンと少数のユーザーで動作する可能性がありますが、より多くのユーザーに簡単に拡張することはできません。WebSocketと長いポーリングを確認することをお勧めします。
より良い代替手段は、を使用することSocket.IO
です。これにより、このタスクがはるかに簡単になります
Socket.IOはそれをクロスブラウザソリューションにします
socket.ioからの例
サーバ:
var io = require('socket.io').listen(80);
io.sockets.on('connection', function (socket) {
socket.emit('news', { hello: 'world' });
socket.on('my other event', function (data) {
console.log(data);
});
});
クライアント(ブラウザ):
<script src="/socket.io/socket.io.js"></script>
<script>
var socket = io.connect('http://localhost');
socket.on('news', function (data) {
console.log(data);
socket.emit('my other event', { my: 'data' });
});
</script>
編集:
PHPの場合、phpwebsocketクラスが適しています。また、クライアント側のjqueryプラグインの場合も同様です。
JavaScriptは、setIntervalとsetTimeOutの2種類のタイマーを認識しています。setIntervalは100ミリ秒ごとに起動し、setTimeOutは前の呼び出しの100ミリ秒後に次の呼び出しをスケジュールします。アプリを調整するときは、この動作に注意する必要があります。また、実際には別のスレッドで仕事をしているWebworkerを検討することもできます。彼らはあなたの問題に適した解決策に聞こえるメッセージベースで通信します。正確な遅延(100ミリ秒以上)は、実際に試す必要があるものです。John Resigの本は、smallesの実用的なタイマー遅延が21ms(IE9)から1ms(Opera)まで、ブラウザー間で大きく異なることを示しています。