gpt4 book ai didi

php - 使用现有的PHP套接字

转载 作者:行者123 更新时间:2023-12-03 12:09:19 25 4
gpt4 key购买 nike

这是我对论坛的第一篇文章,对于任何新手错误都深表歉意...

我有一个php脚本,它将向服务器打开流套接字,发送请求并等待响应消息。该脚本如下所示:

<?php
$addr="192.168.1.1";
$port=6010;

$sock = fsockopen("tcp://$addr:$port", $errno, $errstr, $timeout) or die("socket problem");
stream_set_timeout($sock,30) or die("timeout not set");

$message='<?xml version="1.0" encoding="UTF-8"?><Request><Type>1</Type></Request>'

$slen=pack("N",strlen($message));

fwrite($sock,$slen.$message);

ob_flush();flush();

while((!feof($sock)) && (!$info['timed_out'])){
$b3=fread($sock,3);
$b4=fread($sock,1);
$temp=unpack("N",$b3.$b4);
$length=$temp[1];
$lines=fread($sock,$length);
if($lines){
if(preg_match("'<Response>(.*?)</Response>'",$lines, $match)){
if($match){
$content=$match[1];
echo nl2br($content);
}
}
}
$info = stream_get_meta_data($sock);
}
fclose($sock);
?>

上面的脚本效果很好,但是我想在此添加功能(取消按钮)以退出while循环,并使用相同的套接字将取消消息发送到服务器,例如0型

问题在于,提交将刷新页面并释放当前的$ sock。

任何想法或简单的解决方案将不胜感激。

谢谢。 T.

最佳答案

详细说明@Scuzzy的建议,一种选择可以是使“取消按钮”异步调用到另一个php脚本。这将在文件/磁盘/数据库(您的选择)上设置一个标志,指示该用户要求取消。

异步调用将在主要php脚本上保留 session 。

在这里的主循环中,您定期检查该标志的状态,如果设置了标志,则立即退出,并在需要时执行其他清除。

主循环的伪代码为:

<?php
/*
All the initialization
*/

cancelOperation = False;
while((!feof($sock)) && (!$info['timed_out'])){
$b3=fread($sock,3);
$b4=fread($sock,1);
$temp=unpack("N",$b3.$b4);
$length=$temp[1];
$lines=fread($sock,$length);
if($lines){
if(preg_match("'<Response>(.*?)</Response>'",$lines, $match)){
if($match){
$content=$match[1];
echo nl2br($content);
}
}
}
$info = stream_get_meta_data($sock);

// Now check external condition, from either file or db for example
cancelOperation = checkExternalCondition();
if (cancelOperation === True) {
break;
}
}
if (cancelOperation === True) {
// additional cleanup needed goes here.
}
fclose($sock);
?>

关于php - 使用现有的PHP套接字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45665369/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com