2

我想使用 ajax 编写一个聊天应用程序。所以我需要每 100 毫秒(0.1 秒)检查一次数据库中的用户消息表。如果我使用 setTimeOut 每 100 毫秒调用一次 ajax 有什么问题吗?有性能问题吗?有什么坑还是什么?

4

3 回答 3

0

这是一个非常糟糕的主意。虽然它可能适用于您的本地计算机和少数用户,但它无法轻松扩展到更多用户。我建议你看看 websockets 和长轮询。

于 2013-03-25T06:40:33.513 回答
0

JavaScript 知道两种定时器:setInterval 和 setTimeOut。setInterval 每 100 毫秒触发一次, setTimeOut 将下一个调用安排在前一个调用之后 100 毫秒。在调整您的应用程序时,您应该牢记这种行为。您也可以考虑网络工作者,他们真正在单独的线程上完成工作。他们基于消息进行交流,这听起来很适合您的问题。确切的延迟(100 毫秒或更多)是您真正需要尝试的。John Resig 的书表明,从 21 毫秒 (IE9) 到 1 毫秒 (Opera) 不同浏览器的实际计时器延迟差异很大。

于 2013-03-25T06:49:41.510 回答
0

更好的选择是使用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 插件

于 2013-03-25T06:42:25.730 回答