Javascript 什么';通过ajax向db发出持续请求的有效方法是什么?

Javascript 什么';通过ajax向db发出持续请求的有效方法是什么?,javascript,php,jquery,mysql,ajax,Javascript,Php,Jquery,Mysql,Ajax,我正在使用php、mysql、jquery和ajax创建一个实时聊天应用程序 我希望了解一种更好的实时任务处理方法。 我希望开始检查新消息,用户是否在线,用户是否在登录后立即键入 目前,我在setTimeout上对db进行ajax调用,以便准备好文档中的数据。这是正确的方法吗?或者是否有其他方法可以提高系统性能 此外,我首先检索要检查的会话id数组。然后我在数组中循环检查是否有新消息或用户是否键入了。我认为这不够有效。必须一个接一个地检查对话。是否有一种方法可以对阵列中提供的每个会话id分别调用

我正在使用php、mysql、jquery和ajax创建一个实时聊天应用程序

我希望了解一种更好的实时任务处理方法。 我希望开始检查新消息,用户是否在线,用户是否在登录后立即键入

目前,我在setTimeout上对db进行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);


        })()
     );

更好的方法是使用套接字。为此,您可以使用类似socket.io的库。另一个选项是使用JSON长轮询

因为您使用的是PHP,所以可以签出(使用socket.io的PHP实时应用程序库)


io使用WebSocket来帮助实时通信。它还包括使用传统(长)轮询ajax请求的回退机制。

请您为我提供这两种技术的参考资料好吗?我还想知道,套接字是托管在第三方服务器上还是仅仅托管在库中?@arun:你说得对。插座是最好的选择。请提供适当的资源来支持您的答案。否则,这也可能是一个评论。@BhavikShah谢谢你的建议。更新为reference@ArunGhosh,即使我在php中工作,节点js也是必须的吗?@Keren您需要有节点js。