检测用户中止/导航 websocket
Posted
技术标签:
【中文标题】检测用户中止/导航 websocket【英文标题】:Detecting user abort/navigation websockets 【发布时间】:2014-09-25 04:26:23 【问题描述】:我正在尝试使用 websockets,并想检测用户是否已从页面导航到运行 php 流脚本。其他一切正常。
我所做的一切都不会阻止 PHP 脚本运行(在本地使用 Xampp)。
我目前正在使用 javascript 的 beforeunload
、PHP 的 connection_aborted()
、connection_status()
甚至 file_exists()
(这是目前唯一可以使用的!!!)。
在脚本存在或我重新启动 apache 之前,我无法重新加载页面,但这是我必须开始工作的中止检测。 Firebug 报告套接字脚本已中止,但 PHP 只是保持 ion 运行。任何帮助表示赞赏。
我的 javascript 看起来像这样
function socket_open()
if(!!window.EventSource)
var websocket = new EventSource('./ajax/progress.php');
websocket.addEventListener('message', function(e)
var data = JSON.parse(e.data);
console.log(data);
,false);
$(window).bind('beforeunload', function()
websocket.onclose = function();
websocket.close();
);
而我的 PHP 是这样的。 ./ajax/progress.php
function get_task_progress()
$output = array();
//conditionally create some output
if(!empty($output))
echo 'data: '.json_encode($output)."\n\n";
ob_flush();
flush();
sleep(1);
if(!connection_aborted() && connection_status()==0 && file_exists('1.txt'))
get_task_progress();
【问题讨论】:
【参考方案1】:我似乎已经解决了它,但在测试实时连接之前,每次请求都会回显并刷新无更新状态
if(!empty($output))
$tasks_state = $tasks_new;
echo 'data: '.json_encode($output)."\n\n";
else
echo 'data: '.json_encode(array('e'=>0))."\n\n";
ob_flush();
flush();
sleep(1);
if(!connection_aborted() && connection_status()==0)
get_task_progress();
【讨论】:
以上是关于检测用户中止/导航 websocket的主要内容,如果未能解决你的问题,请参考以下文章
Qt QNetworkAccessManager 中止身份验证
如何使用 UINavigationController 中的所有视图和导航控制器的导航控件检测用户活动?
Grails:在服务器端检测请求中止(ajax,escape,reload)
检测到错误后,Can Address Sanitizer会立即中止吗?