在javascript中结束php套接字连接
我有一个PHP脚本,它打开到同一网络上机器的套接字连接,等待响应长达60秒,然后返回结果。使用“主页面”上的ajax请求调用此脚本,该主页面显示包含结果的消息 问题是我希望能够在任何时候从“主页”结束套接字连接,这是可以做到的吗?或者其他人能想出更好的方法吗在javascript中结束php套接字连接,javascript,php,jquery,sockets,Javascript,Php,Jquery,Sockets,我有一个PHP脚本,它打开到同一网络上机器的套接字连接,等待响应长达60秒,然后返回结果。使用“主页面”上的ajax请求调用此脚本,该主页面显示包含结果的消息 问题是我希望能够在任何时候从“主页”结束套接字连接,这是可以做到的吗?或者其他人能想出更好的方法吗 谢谢 这是一个非常轻的重量和未经检验的理论 open.php <?php session_start(); $_SESSION['fp'] = fsockopen($_GET['url'], 80, $errno, $errstr,
谢谢 这是一个非常轻的重量和未经检验的理论 open.php
<?php
session_start();
$_SESSION['fp'] = fsockopen($_GET['url'], 80, $errno, $errstr, 60);
// Do listen for 60 seconds, get data
while (!feof($_SESSION['fp'])) {
echo fgets($_SESSION['fp'], 128);
}
fclose($_SESSION['fp']);
unset($_SESSION['fp']);
?>
<?php
session_start();
if(isset($_SESSION['fp'])){
fclose($_SESSION['fp']);
unset($_SESSION['fp']);
}
?>
这里的想法是,文件指针存储在会话变量中,因此其他脚本可以调用它。因为你没有提供一个例子,我不能说这是否适用于你。我从来没有测试过它,因为我从来没有想要一个脚本来过早地关闭连接。我一直想保持开放,直到我得到所有的数据,然后在EOF关闭
或者,您可以对进程ID执行类似的操作。每个PHP脚本在运行时都会得到一个PID。此处进行了详细讨论:这是一个黑客行为,但是您可以发送第二个ajax调用,该调用触发一个shell命令来查找并终止具有套接字连接的进程……假设您可以在进程列表中识别正确的进程,则无法从客户端关闭套接字。您将需要一个PHP脚本,该脚本可以识别文件指针,然后可以关闭套接字。然后可以从客户机通过AJAX调用它。我记不起是否可以将FP存储在会话变量中。可能会更容易获得套接字的进程ID,然后通过另一个脚本杀死它。最好是编辑你的帖子并包含你的代码示例。虽然我没有使用上面的确切答案,但它确实引导了我一个我以前没有考虑过的伟大想法。我在页面开始时将一个会话变量设置为true,然后在页面上创建一个按钮,单击该按钮将加载一个php页面,以将该会话变量设置为false。处理套接字连接的脚本将在收到响应或会话变量为false时关闭连接。这么简单的想法-谢谢你的提示!
$(function(){
$("#go").click(function(){
$.get("open.php", { url: $("#url").val() }, function(results){
console.log(results);
});
});
$("#stop").click(function(){
$.get("close.php");
});
});