Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/470.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在javascript中结束php套接字连接_Javascript_Php_Jquery_Sockets - Fatal编程技术网

在javascript中结束php套接字连接

在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,

我有一个PHP脚本,它打开到同一网络上机器的套接字连接,等待响应长达60秒,然后返回结果。使用“主页面”上的ajax请求调用此脚本,该主页面显示包含结果的消息

问题是我希望能够在任何时候从“主页”结束套接字连接,这是可以做到的吗?或者其他人能想出更好的方法吗


谢谢

这是一个非常轻的重量和未经检验的理论

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");
  });
});