使用codeigniter和node.js进行长轮询

时间:2012-06-24 13:49:07

标签: php jquery codeigniter node.js long-polling

我处于研究新技术的位置,所以我听到了一些关于长轮询的信息,node.js。

我需要创建一个使用long polling

的Web应用程序

在这个项目的每一页上,我都需要使用轮询,实际上它会检查是否有新的电子邮件通过POP。

所以我认为我需要做以下

  1. 向服务器调用ajax请求
  2. 服务器收到请求并检查是否有新的电子邮件
  3. 如果有新邮件服务器响应其详细信息
  4. 如果没有新的电子邮件服务器在某个时间开始休眠并再次检查,直到有一个新的电子邮件到达。
  5. 这样的事情

    $(document).ready(function(){
    
    is_there_new_mail();
    
    function is_there_new_mail()
    {
    
    $.get(url,function(data){
    
    if(data ==true)
    {
    //do some actions and call again
    is_there_new_mail();
    }
    
    
    });
    
    
    }
    
    
    });
    

    并在服务器上像这样

       function check_mail()
        {
    
        //processing and checking is there a new mail on inbox 
    
        return $is_mail = $this->_new_mail()?true:false;
    
        }
    
        function receiver()
        {
        if($check_mail())
        {
         //send to client..
        }
        else
    
        {
        //sleep sometime and call mail function
        }
    
    } 
    

    我听说做这样的事情会在服务器上打开很多连接,如果我们使用node.js,我们可以在一个连接中管理它。

    我正在使用Codeigniter,对node.js来说真的很新。

    如何使用codeigniter实现node.js,或者您可以建议我更多关于这种情况的信息。

1 个答案:

答案 0 :(得分:3)

不是node将处理一个连接中的所有请求。节点可以同时处理大量的并发连接,与node.js相比,其他人手中的Apache只能处理很少的并发连接

查看websockets http://socket.io/

Websockets允许客户端和服务器之间的全双工连接。 HTTP协议为每个请求打开一个连接,并在客户端收到响应后连接结束。 Websockets允许我们保持连接打开。

如果在服务器端使用nodejs和websockets,则可以使用套接字将事件推送到客户端,而不是客户端以特定间隔轮询服务器。

因此它可以帮助您避免长时间轮询。

在你的情况下: 如果您决定使用nodejs和websocket,那么您将需要找到一种方法来触发服务器中的传入电子邮件事件,并通知现有套接字有关该事件。

因此节点还需要轮询POP以检查邮件,区别是什么

想象一下,1000名用户使用轮询登录到应用程序。每个用户每30秒轮询一次服务器。所以2000次POP民意调查每秒。

使用nodejs,第二次POP轮询,如果有任何邮件,请通知套接字,客户端将处理该事件。

但您应该考虑项目的总体要求。 How to decide when to use Node.js?