0
TCP 소켓 서버에 연결하여 ID를 보내고 지속적인 업데이트를받는 PHP 스크립트를 만들었습니다. (그것은 내 온도 조절기에 연결됩니다.) 그러나 현재 PHP는 온도 조절기가 닫힐 때까지 소켓을 열어 둘 것입니다. 5 초 후에 자동으로 PHP 스크립트에서 소켓을 닫을 수 있습니까? 예외가 발생되지 않은 상태5 초 후에 PHP 소켓을 닫으십시오.
<?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);
?>
`
SO_RCVTIMEO를 사용해 보았습니다. 서버가 5 초 동안 아무 것도 보내지 않는 한 작동합니다. 그러나 내가 연결하는 tcp 소켓 서버는 매 초마다 하트 비트를 계속 전송합니다. 그 결과 PHP 런타임 타임 아웃이 만료 될 때까지 소켓을 닫지 않습니다. –