2015-01-29 4 views
0

Я создал скрипт PHP, который подключается к серверу TCP Socket, отправляет идентификатор, а затем получает постоянные обновления. (Он подключается к моему термостату). Однако в настоящее время PHP будет держать сокет открытым, пока он не будет закрыт моим термостатом. Как я могу автоматически закрыть сокет из PHP-скрипта через 5 секунд?Закрыть PHP TCP Socket через 5 секунд

<?php 

//Port and IP 
$service_port = ('5000'); 
$address = ('10.0.0.14'); 

// Create a TCP/IP socket. 
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); 
if ($socket === false) { 
    echo "socket_create() failed: reason: " . socket_strerror(socket_last_error()) . "<br />"; 
} else { 
    echo "OK.<br />"; 
} 

echo "Attempting to connect to '$address' on port '$service_port'..."; 
$result = socket_connect($socket, $address, $service_port); 
if ($result === false) { 
    echo "socket_connect() failed.<br />Reason: ($result) " . socket_strerror(socket_last_error($socket)) . "<br />"; 
} else { 
    echo "OK.<br />"; 
} 

$in .= "{ \"action\": \"identify\", \"options\": {\"core\": 0,\"receiver\": 1,\"config\": 0,\"forward\": 0}, \"media\": \"all\"}"; 
$out = ''; 

//Send Message 
socket_write($socket, $in, strlen($in)); 


//Reply 
echo "Reading response:<br /><br />"; 
while ($out = socket_read($socket, 2048)) { 
    echo $out."<br /><br />"; 
} 
socket_close($socket); 
?> 

`

ответ

1

Розетки открыты, в то время как исключение не происходит. Вы должны установить значение тайм-аута считывания сокета, прежде чем вы начнете его читать.

socket_set_option($socket,SOL_SOCKET, SO_RCVTIMEO, array("sec"=>5, "usec"=>0)); 

Если вы этого не сделаете, в то время как цикл будет ждать до тех пор, пока навсегда не будет сигнал.

+0

Я попытался использовать SO_RCVTIMEO, это работает, пока сервер ничего не отправляет в течение 5 секунд. Однако сервер сокетов tcp, к которому я подключаюсь, продолжает посылать пульс каждую секунду. в результате чего он не закрывает сокет до тех пор, пока не будет выполнен тайм-аут времени выполнения php. –

Смежные вопросы