刚接触实时通讯这块,知道用websocket更高效,但我想了解轮询的实现过程,循序渐进

短轮询用定时器setInterval已经实现了,但长轮询时后台进入死循环模块导致整个网站的php网页无响应,比如刷新页面、提交消息都没法进行。具体代码如下:

chat.php:

style="width: 570px;height: 120px;margin: 5px;resize: none">

发送

chat.js:

//拉取新消息

var setting = {

type: "POST",

dataType: "html",

url: "./util/action.php?action=message_pull",

data: {uid_get: $('#chat_content').attr('uid')},//传递目标用户uid

success: function (msg) {

if (msg.length > 0) {

$('.chat_content_list_table').append(msg);//追加消息列表

}

$.ajax(setting);//立即继续请求

}

};

$.ajax(setting);

action.php中的对应函数:

function message_pull($conn)

{

session_start();

session_write_close();//关闭session锁并没有效果,仍被阻塞

$uid_post = $_SESSION['userinfo'][0]['id'];//发送者,即当前登录用户uid

$uid_get = $_POST['uid_get'];//消息目标用户uid

$message_list = '';

//建立长连接,直到拉取到新消息后断开连接

while (true) {

//查询新消息

foreach (select($conn, 'message', "(uid_get=$uid_post AND uid_post=$uid_get AND read_flag<>1)") as $message) {

update($conn, 'message', 'read_flag=1', "id={$message['id']}");//每读取一条则将其置为已读状态

$message_list .= "

" . $message['content'] . "" . $message['post_time'] . "";

}

if (strlen($message_list) > 0) {

echo $message_list;//输出新消息

break;//断开连接

}else

sleep(1);//挂起1s后继续查询

}

mysqli_close($conn);

}

之后测试一下,发现一旦php后台进入while循环,就会导致被阻塞,但我看到网上很多demo都这样写,于是感觉很疑惑,谢谢大大们指教

php长轮询阻塞,ajax长轮询时php被阻塞相关推荐

  1. Ajax轮询,Ajax长轮询和websockte

    http协议介绍: http协议是请求响应式的,每个http相应都对应一个http请求,http协议是没有状态的,多个http协议之间是没有关系的. http协议的被动性:在标准的http语义中,浏览 ...

  2. ajax js 轮询请求,ajax的轮询和长轮询

    概念: 轮询环行进端处触码通法果泉位可近境其行框理发(polling):客户端按规定时间定时像服务端发送ajax请求,服务器接到请求后马上返回响应信息并关闭览页些求时是过解些这确如目前例总站回广随能4 ...

  3. ajax长轮询 java web_网页实时聊天之js和jQuery实现ajax长轮询

    众所周知,HTTP协议是无状态的,所以一次的请求都是一个单独的事件,和前后都没有联系.所以我们在解决网页实时聊天时就遇到一个问题,如何保证与服务器的长时间联系,从而源源不段地获取信息. 一直以来的方式 ...

  4. java+jquery实现长轮询案例_网页实时聊天之js和jQuery实现ajax长轮询

    众所周知,HTTP协议是无状态的,所以一次的请求都是一个单独的事件,和前后都没有联系.所以我们在解决网页实时聊天时就遇到一个问题,如何保证与服务器的长时间联系,从而源源不段地获取信息. 一直以来的方式 ...

  5. ajax长轮询tornado,Tornado长轮询和WebSocket

    Http协议是一种请求响应式协议, 不允许服务端主动向客户端发送信息. 短轮询是一种简单的实现服务端推送消息的解决方案, 客户端以一定间隔自动向服务端发送刷新请求, 服务端返回要推送的消息作为响应. ...

  6. Comet 反Ajax: 基于jQuery与PHP实现Ajax长轮询(LongPoll)

    传统的AJAX轮询方式,客服端以用户定义的时间间隔去服务器上查询最新的数据.种这种拉取数据的方式需要很短的时间间隔才能保证数据的精确度,但太短的时间间隔客服端会对服务器在短时间内发送出多个请求. 反转 ...

  7. WEB消息提醒实现之二 实现方式-Jquery Ajax长轮询

    #Jquery Ajax长轮询 ##原理 Jquery Ajax长轮询的原理主要是,前台客户端发送ajax请求到服务器,服务器接收到请求之后会保持住连接,直到有新消息才返回响应信息并关闭连接,客户端处 ...

  8. php ajax 长轮询 表单,Thinkphp结合AJAX长轮询实现PC与APP推送详解

    前言 本文主要给大家介绍的关于Thinkphp结合AJAX长轮询实现PC与APP推送的相关内容,分享出来供大家参考学习,话不多说,来一起看看详细的介绍. 实现逻辑 某个操作(比如新建一条公告)后,触发 ...

  9. ajax使用频率,AJAX轮询频率 - 要长期轮询还是不轮询长轮询?

    我正在构建一个需要相对不变的数据库轮询的网页组件.我可以看到两种不同的方法,我想知道他们中的一个是否比其他人好,或者如果我错过了第三个选择.AJAX轮询频率 - 要长期轮询还是不轮询长轮询? 1)发送 ...

最新文章

  1. UE5废墟破坏游戏场景创建学习教程
  2. Python变量作用域问题
  3. Flask实战2问答平台-完成登录注册功能
  4. Java中Volatile的理解
  5. 百度地图精确定位html,HTML5地理定位,百度地图API,知识点熟悉
  6. Mybatis下collections使用pageHelper进行分页
  7. leetcode - 1039. 多边形三角剖分的最低得分
  8. 【Kafka】kafka AdminClient 闲时关闭连接
  9. Jakarta-ORO正则表达式的运用
  10. 用 dash_bootstrap_components 为 dash 生成美观的导航栏
  11. linux网络总线的作用,I2C总线是什么?基于I2C总线的Linux系统有哪些优点?
  12. 【C语言】数组名地址与数组首元素地址区别(实例分析)
  13. 计算机主机的拆卸步骤,电脑清灰教程:电脑主机怎么清理灰尘?台式电脑主机清理灰尘教学...
  14. 如何使用CANoe和CANalyzer中的Diagnostics/ISO TP
  15. VennDiagram包绘制Venn图
  16. 解决使用maven打jar包缺失依赖包问题
  17. 第一章:计算机的软硬件基本结构_4
  18. python lamba表达式
  19. 2038年无数Java应用的崩溃
  20. python制作gif动图_短短几行Python代码制作的GIF动图

热门文章

  1. 文献引用的标准格式_外语论文文献引用格式—APA Style
  2. 小甲鱼c语言课后作业_知识,就是力量——山财“学习小课堂”助你蓄力
  3. spring security:第一个程序解析
  4. pytorch卷积神经网络_资源|卷积神经网络迁移学习pytorch实战推荐
  5. mac安装win10_mac制作win10启动盘教程
  6. 仿真程序驱动视景问题
  7. Linux的I2C 设备驱动 -- mini2440 上i2c接口触摸屏驱动
  8. 前端切换视图_前端架构 101(五):从 Flux 进化到 Model-View-Presenter
  9. 香肠派对电脑版_《香肠派对》是不是除了《和平精英》最成功的吃鸡手游:靠恶搞火了?...
  10. 【转】Task和async/await详解