php 长轮询_js轮训

php 长轮询_js轮训今天帮人改了个在线聊天室的作业,用PHP+Ajax实现了一个长轮询(longpolling)。服务端主要是两点,一个是用set_time_limit(0);去除页面执行时间的限制。再就是用一个while判断是否有数据,没有的话就sleep几秒钟再重新取。客户端就是一个Ajax,把当前页面的最后一条的记录传给服务器,请求这之后的数据。回调函数sucess和error中都包括调用当前函数。以保证会一…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

今天帮人改了个在线聊天室的作业,用PHP+Ajax实现了一个长轮询(long polling)。

服务端主要是两点,一个是用set_time_limit(0);去除页面执行时间的限制。再就是用一个while判断是否有数据,没有的话就sleep几秒钟再重新取。

客户端就是一个Ajax,把当前页面的最后一条的记录传给服务器,请求这之后的数据。回调函数sucess和error中都包括调用当前函数。以保证会一个接一个的不断请求,其实这里用setInterval()也可以。如果要用回调的话,Ajax里需要加上cache: false,否则某些浏览器(如IE10)会在第二次请求的时候拿到304 Not Modified,浏览器会瞬间卡死。

具体的代码实现非常短,贴在下面:

chatview.php

set_time_limit(0);

//require(‘chatconfig.php’);

header(‘Content-type: application/json’);

//开始计算当前页面循环时间

$begintime = time();

//从某个ID开始取

$begin = 0;

if(isset($_GET[‘begin’]) && is_numeric($_GET[‘begin’]) && $_GET[‘begin’]>0)

{

$begin = $_GET[‘begin’];

}

$sql = sprintf(“SELECT * FROM (SELECT * FROM chat WHERE id > ‘%d’ ORDER BY id DESC LIMIT 100) t ORDER BY id ASC”, $begin);

$result = $mysql->query($sql);

//如果没有取到数据,且执行时间小于30秒,则暂停1秒后重新查询

while($result->num_rows == 0 && (time()-$begintime<30))

{

sleep(1);

$result = $mysql->query($sql);

}

//用JSON返回数据

$ret = array();

if ($result->num_rows > 0)

{

while($row = $result->fetch_assoc())

{

$ret[]=array(‘id’=>$row[“id”],’nick’=>$row[“nick”],’content’=>$row[“content”]);

}

}

echo json_encode($ret);

$mysql->close();

?>

JavaScript代码(jQuery)

function chat_update()

{

$.ajax({

url: “chatview.php”,

//取最后一条ID之后的数据

data: {begin: window.Lastid},

cache: false,

success: function (data) {

//将数据填入页面上

resolveMsg(data);

chat_update();

},

error: function(){

chat_update();

}

});

}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/183759.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 实施运维企业面试题-5「建议收藏」

    实施运维企业面试题-5「建议收藏」NETWORK1请描述TCP/IP协议中主机与主机之间通信的三要素参考答案IP地址(IPaddress)子网掩码(subnetmask)IP路由(IProuter)2请描述IP地址的分类及每一类的范围参考答案A类1-26B类128-191C类192-223D类224-239组播(多播)E类240-254科研3请描述A、B、C三类IP地址的默认子网掩码参考答案A类255.0.0.0B类255.255.0.0C类

    2022年5月5日
    34
  • awk linux 数组,Linux中的awk数组的基本使用方法

    awk linux 数组,Linux中的awk数组的基本使用方法1.awk数组描述在其他的编程语言中,数组的下标都是从0开始的,也就是说,如果想反向引用数组中的第一个元素,则需要引用对应的下标[0],在awk中数组也是通过引用下标的方法,但是在awk中数组的下标是从1开始的,在其他语言中,你可能会习惯于先“声明”一个数组,在awk中,则不用这样,直接为数组的元素赋值即可(其实如果自己给数组赋值,下标从1或者从0开始那就无所谓了!)2.在声明数组时,可能值很多…

    2022年7月19日
    14
  • 常用泰勒级数展开[通俗易懂]

    常用泰勒级数展开[通俗易懂]因为日常计算中经常需要做一些近似,而泰勒级数展开是其中最常用的一种,所以本篇整理了部分常见的(一元函数)泰勒公式展开

    2022年10月24日
    0
  • 经济基础知识(中级)【2】

    经济基础知识(中级)【2】1.下列经济活动中,会导致企业现金流入的有()。A.购买原材料B.用固定资产对外投资C.对外投资D.收到银行贷款E.销售商品2.下列义务中,属于公司股东法定义务的有()。A.遵守公司章程B.缴纳所认缴的出资C.忠实义务D.勤勉义务E.公司设立登记后,不得抽回出资3.会计确认应该符合一定的标准,企业在确认收入时应当坚持的标准有()。A.及时确认B.取得收入权利的交易已经发生C.按照权责发生制要求进行确认D.取得资产所有权的交易已经发生E.年底统一确认4.下列统计

    2022年5月8日
    57
  • idea 2022.01.13最新激活码(JetBrains全家桶)「建议收藏」

    (idea 2022.01.13最新激活码)本文适用于JetBrains家族所有ide,包括IntelliJidea,phpstorm,webstorm,pycharm,datagrip等。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/ide…

    2022年4月1日
    808
  • Docker学习笔记(1) — 安装docker

    Docker学习笔记(1) — 安装docker

    2022年3月6日
    58

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号