Моя страница home.php содержит различные ссылки.При щелчке по одному из этих hrefs открывается второе окно с именем sseReceiver.php.Окно home.php также остается открытым.sseReceiver.php использует отправленный сервером источник событий, который называется theSource.php, для получения событий и их отображения в таблице.
theSource.php устанавливает сокетное соединение с сокетом, который был создан с использованием Java-сервера.Когда сервер Java генерирует сообщение, theSource.php получает его и сбрасывает.sseReceiver.php забирает это сообщение и отображает его.
Это хорошо работает.
Однако, пока sseReceiver.php открыт, если я нажимаю на любую другую ссылку на моей странице home.php,страница зависла при загрузке и в итоге выдает ошибку 504.
Вопрос Почему я не могу получить доступ к другим ссылкам на home.php, когда запущен sseReceiver.php?Есть ли способ запустить theSource.php в другой ветке, чтобы я мог получить доступ к остальной части сайта одновременно?
Ценю ваши предложения и помощь.
Спасибо.
Код для theSource.php
session_start();
header("Content-Type: text/event-stream\n\n");
header('Cache-Control: no-cache');
set_time_limit(0);
ob_end_flush();
ob_implicit_flush(1);
function sendMessage($message)
{
$explodedData = explode(',', $message);
$data = array();
foreach ($explodedData as $result)
{
$b = explode('^', $result);
$data[trim($b[0])] = trim($b[1]);
}
//sse stuff
echo("retry: 3000\n");
echo('data: '. json_encode($data));
echo "\n\n";
flush();
}
$serverAddress=SERVER_ADDRESS;
$serverListeningPort=SERVER_PORT;
//make a connection and get a socket object
if ( ($socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) === FALSE )
{
echo "socket_create() failed: reason: " .socket_strerror(socket_last_error());
}
else
{
echo("socket create was successful");
echo("<br>");
}
echo ("Attempting to connect to host");
echo("<br>");
if ( ($result = socket_connect($socket, $serverAddress, $serverListeningPort)) === FALSE )
{
echo ("socket_connect() failed. Reason:".socket_strerror(socket_last_error($socket)));
}
echo ("Reading response:");
$message="";
while(true)
{
$message=socket_read($socket, 300);
if($message!=='')
{
sendMessage($message);
}
}
Код для sseReceiver.php
var evtSource=new EventSource("theSource.php");
evtSource.onmessage=function(event)
{
var payload=JSON.parse(event.data);
// code to display payload on webpage in a table
}