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)
上一篇 2022年8月31日 下午4:16
下一篇 2022年8月31日 下午4:36


相关推荐

  • mysql修改用户密码的方法及命令

    mysql修改用户密码的方法及命令方法1:用SETPASSWORD命令 首先登录MySQL。 格式:mysql&gt;setpasswordfor用户名@localhost=password(‘新密码’); 例子:mysql&gt;setpasswordforroot@localhost=password(‘123456’); 方法2:用mysqladmin 格式:mysqladmin-u用户…

    2022年6月29日
    43
  • 使用VLC搭建视频直播服务器[通俗易懂]

    使用VLC搭建视频直播服务器[通俗易懂]去年我们信息之夜我们进行过视频直播服务,当时我们使用了WMS(WindowsMediaServer)实现了这个服务,但是编码是微软的WMV,因而像iPhone/Android这样的智能手机无法观看,今天我给大家带来一种更简便的实现方式,并帮助所有平台用户都可以观看。首先介绍一下,今天我们的工具VLCPlayer。VLC主页:http://www.videolan.org VLC

    2022年6月4日
    40
  • 什么是OpenClaw?OpenClaw能做什么?2026年OpenClaw详细介绍及部署教程

    什么是OpenClaw?OpenClaw能做什么?2026年OpenClaw详细介绍及部署教程

    2026年3月13日
    2
  • 带通滤波器电路图设计(转)

    带通滤波器电路图设计(转)转自:http://www.elecfans.com/dianlutu/187/20180224638878_a.html带通滤波器电路图设计(一)传统的带通滤波器设计方法中涉及了很多复杂的理论分析和计算。针对上述缺点,介绍一种使用EDA软件进行带通滤波器的设计方案,详细阐述了使用FilterPro软件进行有源带通滤波器电路的设计步骤,然后给出了在Proteus中对所设计的滤波器进行仿真分析和测试的方法。测试结果表明,使用该方法设计的带通滤波器具有性能稳定。设计难度小等优点,也为滤波器的设计提供了一个

    2022年5月29日
    44
  • 如何通过pycharm使用pandas库

    如何通过pycharm使用pandas库如何通过 pycharm 使用 pandas 库首先在 anaconda 里搭建 pandas 环境 1 点左下角 create2 输入 pandas 并点 create 在 pycharm 中的使用 File gt Setting gt DefaultProje gt PythonInterp gt 选择含有 pandas 的一项 gt ok gt 点左下方 号 gt 搜索 pandas gt InstallPacka 然后新建一个 project

    2026年3月27日
    1
  • 远程桌面由于以下原因之一无法连接到远程计算机

    远程桌面由于以下原因之一无法连接到远程计算机由于计算机与远程服务器之间设置端口防护,阻断了远程连接默认的3389端口,出现以下问题,需要修改远程连接端口:1、登录远程连接服务器,修改注册表。1):开始-&gt;附件-&gt;运行/或快捷键win+R组合键,win就是键盘上的windows系统图标键。找到运行对话框。2):在对话框中输入regedit命令,打开注册表编辑器3):按照…

    2022年5月14日
    139

发表回复

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

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