求教一个 ajax 的长连接问题。。

sbwtw 2012-08-13 11:39:45
小弟在做一个类似webQQ的聊天网页,本来是通过ajax每两秒发送一次请求获取信息,现在想改为一个消息发出去后,如果没有新消息服务器则不返回,遇到新消息后由服务器返回,客户端再发一个请求,
但是实现过程中发现,当这个消息在等待的时候,新创建的别的ajax请求也在等待,貌似要等这个返回之后,其它的才继续执行,但是ajax创建一个对象之后,应该互相就没关系了呀?我是用的jquery ajax
PHP这边我是这样写的:
while(($res->num_rows)==0){
$res->close();
sleep(1);
$res=$mysqli->query($sql);
}

当把这段while注释掉,客户端采用每2s发送一次请求时无任何问题
客户端代码:
function get_msg(){
$.post("/lts/class/get_msg.php","lst_msg="+lst_msg,function Get_msg_callback(msg_back){
var i=0;
while(msg_back[i].msg!=""){
$('.msgs_box').append("<div class='otr'><xmp>"+msg_back[i].sender+" : "+msg_back[i].msg+"</xmp></div>");
lst_msg=msg_back[i].id;
i++;
}
//立即调用
//get_msg();
},"json");
return;
}
...全文
142 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
helloyou0 2012-08-16
  • 打赏
  • 举报
回复
不错不错, 学习,
楼主能去php.net的session_write_close页面写个注释就更好了

[Quote=引用 6 楼 的回复:]

是你的session问题

建议在无session更改的页面 session_start 以后马上 session_write_close() 就可以了
[/Quote]
sbwtw 2012-08-15
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]

是你的session问题

建议在无session更改的页面 session_start 以后马上 session_write_close() 就可以了
[/Quote]

非常感谢!没想到居然是session的问题,又学到东西了,呵呵..
sddffd1223 2012-08-15
  • 打赏
  • 举报
回复
是你的session问题

建议在无session更改的页面 session_start 以后马上 session_write_close() 就可以了
ci1699 2012-08-14
  • 打赏
  • 举报
回复
是的,要一个一个地来。

你其它的非长链的可以换其它方式请求好些吧。
helloyou0 2012-08-14
  • 打赏
  • 举报
回复
ajax本身是可以并发的, 应无问题.

但你的代码好像的确有点奇怪...能否多解释点.

另, 注意浏览器都是有同一域名并发连接限制的! 每个浏览器稍有不同
franzhong 2012-08-14
  • 打赏
  • 举报
回复
你这段代码看起来像是有问题啊

while(($res->num_rows)==0){
$res->close();//close上面的num_rows会减一吗
sleep(1);//这个应提上去,或放下去
$res=$mysqli->query($sql);//close过了,若res不存在了怎么办,是否需与close调换位置
}//当2秒后再发来请求,num_rows会加一?这个while未结束怎么办,循环会不会越来越多
Meteorlet 2012-08-14
  • 打赏
  • 举报
回复
$sql 是什么?如果$sql执行结果永远都有记录的话,那么while就是死循环

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧