首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用AJAX和PHP的Comet和Push技术

如何使用AJAX和PHP的Comet和Push技术
EN

Stack Overflow用户
提问于 2015-08-05 10:47:32
回答 2查看 1.3K关注 0票数 0

我每隔5秒调用一个AJAX,以更新当前登录用户的一些信息到PHP数据库表中。

但它在我的网站上造成了沉重的负担,当我的网站上有多个用户登录时,网站会在一段时间后关闭。

是否有任何方法可以使用彗星或Push等其他技术来改进我的脚本?

下面是我正在使用的代码:

Javascript代码:

代码语言:javascript
复制
jQuery(document).ready(function ($) {   

   update_data(); 

   function update_data() {
     $.ajax({
       type: "POST",
       url: "$URL",
       data: {update_current_time:1},
       success: function(response){
         setTimeout(update_data, 5000);
       },
       error: function(){
         setTimeout(update_data, 5000);
       }
     });
   }
});

PHP代码:

代码语言:javascript
复制
if(isset($_POST['update_current_time']))
{
   $query = "UPDATE users SET user_timer=now() WHERE  user_id=".$_SESSION['id'];
   $db->execute();
   echo 'success';
   die;
}
EN

回答 2

Stack Overflow用户

发布于 2015-08-05 10:51:51

要使用push或comet,您将需要设置一个"webserver“,它将侦听某个端口。因此,这不能使用纯php解决,而是需要一个侦听器设置(除非您使用php创建侦听服务器)。

要停留在php中,您可以查看棘轮

另一个常见的方法是将node.js服务器并行到您的way服务器。

票数 0
EN

Stack Overflow用户

发布于 2015-08-05 11:15:54

如果我遇到这个用例,我的实现将使用会话变量。与其每5秒写入数据库,不如将请求时间戳存储在$_SESSION中大约1-2分钟,然后一次性写入整个数据。对于这个例子,让我们考虑一下您希望将其设置为一分钟(60秒)。

所以算法是

  1. 从客户端发出请求。
  2. 在服务器上检查是否设置了会话变量$_SESSION['requestcount']
  3. 如果未设置,则将该变量设置为1,还将将时间戳存储在某个子数组中并返回status 200 OK
  4. 如果设置它,我将检查$_SESSION['requestcount']的值是否为12 (每5秒1次请求x12)。
  5. 如果$_SESSION['requestcount']的值小于12,则将其值增加1并返回status 200 OK
  6. 如果$_SESSION['requestcount']的值等于或大于12,那么我将从子数组中获取所有数据,并准备将其插入到数据库中,并将$_SESSION['requestcount']重置为0,如果$_SESSION['requestcount']很好地返回status 200 OK
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31830340

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档