php - 你向服务器发送了一个请求,过了一段时间返回了A消息,又过了一段时间返回B消息
巴扎黑
巴扎黑 2017-04-11 09:49:31
[PHP讨论组]

消息都需要服务器返回
我目前用的是thinkphp开发,前台用户发起一个请求,服务器处理了请求,返回一个A消息,然后服务器接着处理,然后返回B消息

我现在用的是
$this->ajaxReturn($info) 这个thinkphp自带方法,但是返回了以后,就无法执行接下去的操作,怎么破?

巴扎黑
巴扎黑

全部回复(6)
伊谢尔伦

这个因为 这次链接已经结束了 所以返回不了B 你可以做一个长链接
或者 每次间隔多久 去服务器请求一次数据

PHP中文网

前台做检测,收到第一次的响应之后,就重新请求第二次的结果,或者websocket。

阿神

一个请求肯定是不行的。HTTP协议就是一个request一个response,不可能一个请求多个响应的。
如果有多个响应, 可能是用ajax进行了多个请求

大家讲道理

可以搜一下 swoole或workerman

高洛峰

ajaxReturn这个方法里用了exit终止函数,所以不会执行后来的程序。

这个服务端好像无法做到,除非是前端一个请求对应返回一个结果,然后拿到这个结果再去请求。后端如果无法入手,就从前端入手吧。只要达到的目的是一样的,手段就无所谓了。

伊谢尔伦

服务器发送事件

如果只是简单的应用的话, 可以用到 HTML5 的 EventSource,具体的细节看文档吧,我贴个demo代码

#JS代码
var evtSource = new EventSource("test.php");
evtSource.onmessage = function(e) {
    console.log("message: " + e.data + "--" + e.type;)
};
evtSource.addEventListener("death", function (e) {
    this.close();
});
#php端代码
header("Content-Type: text/event-stream\n\n");

$death = 5;
while (1) {
    echo 'data: This is a message at time ' . $curDate . "\n\n";
    $death--;
    if($death == 0){
        echo "event: death\n";
        echo "data: end\n\n";
    }
    ob_flush();
    flush();
    sleep(1);
}
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号