我正在尝试向连接到服务器的所有客户端发送消息。我一直在循环中检查会话代码,当会话代码改变时,循环不会停止。感谢是否有任何解决方案。非常感谢。
这是server.php
<?php
if( rand(0, 999) === 534 ){
$blnContinue = false;
}
?>
这是client.php
1>Starting deploy 5" Marshmallow (6.0.0) XHDPI Phone ...
1>Starting emulator 5" Marshmallow (6.0.0) XHDPI Phone ...
1>Validating emulator arguments...
1>Determining if emulator is already running...
1>Preparing virtual machine...
1>Launching emulator...
1>Emulator launched successfully.
这是change_session.php
<?php
session_start();
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Server</title>
<link rel="stylesheet" href="../bootstrap-3.3.7/docs/dist/css/bootstrap.min.css">
<script src="../bootstrap-3.3.7/docs/assets/js/vendor/jquery.min.js"></script>
<script src="../bootstrap-3.3.7/docs/dist/js/bootstrap.min.js"></script>
</head>
<body>
<h1>Server</h1>
<button id="start_button" class="btn btn-primary" >Start Quiz</button>
<script type="text/javascript">
document.getElementById("start_button").addEventListener("click", write_to_all);
function write_to_all(){
$.ajax({
type: "GET",
url: "change_session.php" ,
});
}
</script>
<?php
$_SESSION['pass_start_quiz'] = "no";
$i=0;
$spawn = array();
error_reporting(0);
set_time_limit(0);
ob_implicit_flush(true);
$host = "127.0.0.1";
$port = 25011;
$start="no";
echo "Waiting for connections... \n";
ob_flush();
$socket = socket_create(AF_INET, SOCK_STREAM, 0) or die("Could not create socket\n");
$result = socket_bind($socket, $host, $port) or die("Could not bind to socket\n");
$result = socket_listen($socket) or die("Could not set up socket listener\n");
while(true){
$spawn[++$i] = socket_accept($socket) or die("Could not accept incoming connection\n");
echo "\n";
$input = socket_read($spawn[$i], 1024) or die("Could not read input\n");
if($input=='q'){break;}
$input = trim($input);
echo $input ."\n";
ob_flush();
$output = "hello client";
socket_write($spawn[$i], $output, strlen ($output)) or die("Could not write output\n");
ob_flush();
$start_quiz= $_SESSION["pass_start_quiz"];
echo $start_quiz;
if($start_quiz == "yes"){
echo $start_quiz;
$output = "start";
$arrlength = count($spawn);
echo $arrlength;
ob_flush();
for($x = 0; $x < $arrlength; $x++) {
socket_write($spawn[$x], $output, strlen ($output)) or die("Could not write output\n");
}
break;
}
}
socket_close($spawn);
socket_close($socket);
?>
</body>
</html>
答案 0 :(得分:0)
看起来你设计的循环永不停止。我看到循环中有一个条件执行语句。
您似乎正在设置套接字服务器,连接到它然后写入它,但都在client.php中。所以这将在提交时执行,然后丢弃。
我想要设计一些你希望进行套接字通信的东西,就是拥有一个设置套接字的服务器,并持续监听任何新的客户端消息,然后执行一些操作。
您似乎也在使用基于无状态网络的AJAX模式。或许重新思考只对一种沟通方式进行标准化是值得的。 AJAX是一种基于HTTP的无状态方法,用于浏览器与服务器通信,但服务器也可以使用HTTP请求与端点通信。如果您不需要流式传输信息或维持持久连接,则TCP套接字可能不是最佳协议,并且可能会引起混淆。
希望这有帮助!