2016-08-12 44 views
2

我正在创建一个使用php,mysql,jquery和ajax的实时聊天应用程序。什么是通过AJAX不断请求数据库的有效方法?

我想了解一个更好的实时任务的方法。 我要开始检查新邮件,是用户上网是用户键入用户登录之后。

现在,我就setTimeout的AJAX调用数据库来获得文件准备的数据。这是一个正确的方法吗?或者有没有其他方法可以提高系统性能?

另外,我首先检索一个会话id数组进行检查。然后我循环访问数组以检查是否有新消息或用户是否输入。我认为这不够有效。一个对话必须接受检查。有没有办法让我可以单独调用数组中提供的每个对话ID?

现在看起来是这样的:

jQuery(document).ready(function($) { 
//check for new message on document ready 
if(localStorage.getItem("ckuser") > 0){ 
    var id; 
    var friends; 
    $.when(
      ckit.getConversation(),//get conversation ids 
      id = JSON.parse(localStorage.getItem('ids')), 
      ckit.getFriends(),//get friends 
      friends = JSON.parse(localStorage.getItem('friends')) 
    ).then(
      //new messages 
      $.each(id, function(k, v){ 
      console.log('checking'); 
      ckit.check(v); 
      }), 

      //is online 
      $.each(friends, function(k, v){ 
      ckit.isOnline(v); 
      }), 

      //is typing 
      $.each(id, function(k, v){ 
       ckit.getIsTyping(v); 
      }) 
    ); 

} 
} 

这是怎么每次检查新邮件,用户在线并键入的样子:

$.when(
    [make ajax call for first time] 

    ).then(
     (function callMe(){ 
      [make ajax call with updated lastupdate time] 
     setTimeout(function(){ 
      callMe(); 
     }, 1000); 


     })() 
    ); 

回答

2

更好的办法将使用插座它。为此,您可以使用像socket.io这样的库。另一种选择是使用JSON长轮询。

由于您使用PHP,你可以检出elephant.io

Socket.io使用的WebSockets,以帮助实时通信(使用socket.io PHP的实时应用程序库)。它还包括使用传统(长期)轮询Ajax请求的回退机制。

+0

请问您能否为我提供这两种工艺的良好参考?我还想知道,套接字,是托管在第三方服务器还是简单的库? – 112233

+0

@arun:你说得对。套接字是要走的路。请提供适当的资源来宣传您的答案。否则,这也可能是一个评论。 –

+0

@BhavikShah谢谢你的建议。更新为参考 –

相关问题