Существует еще один способ отправки сообщений с сервера на клиент.Для этого вы должны использовать iframe, который подключается к PHP-скрипту (или любой другой метод, который вы используете на стороне сервера), который не закрывает соединение.Затем скрипт PHP отправляет сообщения JavaScript всякий раз, когда клиент должен быть проинформирован о чем-либо.После каждого сообщения сервер сбрасывает выходной поток, чтобы убедиться, что данные действительно попадают в клиент и не кэшируются каким-либо буфером вывода.Вот небольшой пример кода PHP-скрипта, загруженного в iframe (не протестирован и не завершен, просто чтобы показать основы):
<html>
<body>
<script type="text/javascript">
function receiveMsg(data)
{
// Do something with the data, for example send it to some function
// in the parent frame (Where your chat application lives)
}
<?php
while (true) // You may also implement some abort state which should
// be checked here
{
$data = waitForData(); // This is your magic function on the server
// which waits for data to be send to the client
echo "receiveMsg('" . $data . "');"; // Let's say data is just a string.
// You may want to use JSON instead
flush();
}
?>
</script>
</body>
</html>
Преимущество этого метода в том, что он не зависит от опроса,Таким образом, вам не нужно отправлять запросы на сервер каждые х секунд.А когда вы делаете что-то прямо на стороне сервера, тогда сообщения, отправленные одним пользователем, принимаются как можно быстрее другими пользователями, а не через x секунд.Недостатком является то, что у вас есть постоянное соединение HTTP для каждого пользователя чата.Но для этого может потребоваться меньше ресурсов на сервере, чем иметь десятки полных HTTP-запросов в минуту на одного пользователя чата.