JQuery / Ajax-запрос в ожидании бесконечного времени и сбой Apache - PullRequest
1 голос
/ 08 марта 2019

Привет, я новенький, у меня проблема с моим кодом.Я хочу проверить состояние микро и изменить его через php и websockets.Мой запрос ajax работает, но мой первый запрос после изменения статуса каждый раз бесконечно долго ожидает и вылетает мой xampp apache.Прежде всего, я проверяю статус с помощью моего запроса ajax.Все отлично.После нажатия моей кнопки, чтобы изменить статус, запрос застрянет, и setInterval запустит следующий запрос через 2 секунды.Переключение статуса еще несколько раз приведет к краху apache.Если я удалю setInterval, запрос застрянет также.

html-jquery-код:

<!DOCTYPE html>
<html>
    <head>       
        <title>Mikrofone</title>
        <link rel="stylesheet" href="style.css" type="text/css">
        <script src="https://code.jquery.com/jquery-latest.js"></script>
        <script>check_status(); 
            var hash = "882c2071d8ce7ea8912929bbea384d2d2e653bf9";
            $(document).ready(function () {    
                check_status();                    
                setInterval('check_status()', 2000);
            });
            
            function check_status(){    
                $.ajax({ 
                    url: 'http://localhost/neuanfang/mikro.php',
                    data: {action: hash},
                    type: 'post',
                    //async: false,
                    success:function(output) {
                        console.log(output);
                        if (output=="Access denied"){
                            alert("Wrong Key");
                        }
                        else if (output==1){
                            var head = "Device is Unmuted";
                            var link = '<form action="mikro.html" method="post"><input onclick="mute()" value="Status Update" type="image" src="Icon_GREEN.png" /></form>';
                        }
                        else if (output!=1){
                            var head = "Device is Muted";
                            var link = '<form action="mikro.html" method="post"><input onclick="unmute()" value="Status Update" type="image" src="Icon_RED.png" /></form>';
                        }
                        $("#HEADER").html(head);
                        $("#SYMBOL").html(link);                                                   
                    }
                });
            }
        
            function unmute(){
                $.ajax({ 
                    url: 'http://localhost/neuanfang/mikro.php',
                    data: { unmute: hash},
                    type: 'post',
                    success:function(output) {                                              
                    }
                });
            }
        
            function mute(){
                $.ajax({ 
                    url: 'http://localhost/neuanfang/mikro.php',
                    data: { mute: hash},
                    type: 'post',
                    success:function(output) {            
                    }
                });
            }                    
        </script>
    </head>
    <body>
        <table>
            <th>
                <div id="HEADER"></div>
            </th>
        </table>
        <table>
                <tr>
                    <td>
                        <div id="SYMBOL"></div>
                        
                    </td>
                </tr>
                <tr>
                    <td>
                        <a href="http://localhost/neuanfang/mikro.html" onclick="window.open(this.href,'targetWindow','width=440px,height=570px');
                        return false;"> <p style="text-align:center">Popup-Window</p></a>
                    </td>         
                </tr>
         </table>   
    </body>
</html>

php-код:

<?php
# enable sockets in php.ini
# extension=php_sockets.dll

ini_set('display_errors', 10);
ini_set('display_startup_errors', 10);
error_reporting(E_ALL);

set_time_limit(2000);
ini_set('max_execution_time', 2000);

ob_implicit_flush(true);
ob_end_flush();

#echo 'creating socket...';
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === FALSE) {
    die('Error creating socket.');
}

#echo 'connecting microphone...';
$result = socket_connect($socket, '192.168.212.2', 2202);
if ($result === FALSE) {
    die('Error connecting microphone.');
}

function entry(){
	$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
	$result = socket_connect($socket, '192.168.212.2', 2202);
	$cmd = '< GET DEVICE_AUDIO_MUTE >';
	socket_write($socket, $cmd, strlen($cmd));
	while (($out = socket_read($socket, 2048, PHP_BINARY_READ)) !== FALSE) {
		if ($out === '< REP DEVICE_AUDIO_MUTE ON >'){
			echo 0;
		}
		if ($out === '< REP DEVICE_AUDIO_MUTE OFF >'){
			echo 1;
		}
		if (substr($out, -1) === '>') break;
	}	
}

function mute(){
	$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
	$result = socket_connect($socket, '192.168.212.2', 2202);
	$cmd = '< SET DEVICE_AUDIO_MUTE ON >';
	socket_write($socket, $cmd, strlen($cmd));	
	while (($out = socket_read($socket, 2048, PHP_BINARY_READ)) !== FALSE) {		
		if (substr($out, -1) === '>') break;
	}
}

function unmute(){
	$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
	$result = socket_connect($socket, '192.168.212.2', 2202);
	$cmd = '< SET DEVICE_AUDIO_MUTE OFF >';
	socket_write($socket, $cmd, strlen($cmd));
	while (($out = socket_read($socket, 2048, PHP_BINARY_READ)) !== FALSE) {	
		if (substr($out, -1) === '>') break;
	}	
}

function check($post){
	$key= array(
		'882c2071d8ce7ea8912929bbea384d2d2e653bf9'
	);	
	if (!in_array($post,$key)) {
		die('Access denied');
	}
}

if(isset($_POST['unmute']) && !empty($_POST['unmute'])) {	
	$post=$_POST['unmute'];
	check($post);
	unmute();   
}

if(isset($_POST['mute']) && !empty($_POST['mute'])) {	
	$post=$_POST['mute'];
	check($post);
	mute();   
}

if(isset($_POST['action']) && !empty($_POST['action'])) {
	$post=$_POST['action'];
	check($post);
	entry();   
}

socket_close($socket);
?>

Browser-Consol

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...