У меня есть машина HL7, которая отправляет данные через TCP на указанный порт. Я хочу постоянно слушать этот порт и отображать любые данные, полученные на экране.
У меня есть это, которое создает соединение, но в моем сценарии соединение создается машиной HL7, которая затем начинает отправку.
// host and port to connect to
$host = "localhost";
$port = 9876;
// connect to the port
$fp = fsockopen($host, $port, $errno, $errstr);set_time_limit(0);
// if connection not successfull, display error
if (!$fp)
{
die("Error: Could not open socket for connection!");
}
else
{
// connection successfull, listen for data (1024 bytes by default)
$got = fgets($fp);
// display the data
echo $got;
}
fclose($fp);
Вам следует подождать (заблокировать) сокетное соединение от машины HL7. Когда соединение получено, вы должны обработать данные, а затем ждать другого соединения.
Если установлено несколько соединений одновременно, и обработка сообщения HL7 занимает немного времени, может быть целесообразно обработать сообщение / данные из сокета в новом потоке.
<?php
$condition = true;
$socket = socket_create_listen(port);
socket_set_block($socket);
while (condition) {
socket_accept($socket);
// read data from socket
// condition to break from listening
}
?>
Ссылка: http://php.net/manual/en/function.socket-set-block.php
Других решений пока нет …