Как взаимодействовать с веб-сервером с помощью JavaScript - PullRequest
4 голосов
/ 21 апреля 2011

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

Есть несколько способов сделать это, используя веб-сокеты HTML5 и отправленные сервером события.
Но нам нужно реализовать это только в HTML и JavaScript, а не в HTML5.

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

Итак, как мне написать механизм пула в Javascript с использованием Sockets.
Как это должно быть реализовано вконец сервера?

Спасибо!

Ответы [ 2 ]

2 голосов
/ 21 апреля 2011

уже есть несколько примеров ... в зависимости от серверной стороны, вы можете выбрать java-hello-world или php-hello-world или .. .

если вы не можете использовать websocket , вы должны пойти по старому пути, создать интервал на window.setInterval и получить данные с сервера, например, с помощью. $.ajax(). я не знаю другой альтернативы двунаправленной связи (websocket) ... см. ответ kayahrs

как вы и просили:
$.ajax() - это jQuery способ сделать xhr . в основном, он запускает асинхронный запрос к серверу, который возвращает XML или JSON или текст или ... (что угодно). когда этот запрос возвращается, поддерживаемый eventHandler запускается, и вы можете реагировать на ответ. Вы также можете использовать обычный xhr, но немного неудобно работать с оригинальным xhr.
jQuery поддерживает некоторые сокращенные перегрузки для $.ajax(), например. $.getJSON(), $.get(), ...

пример реализации:

$.get("test.cgi", function(data){
    alert("Data Loaded: " + data);
});
1 голос
/ 21 апреля 2011

Существует еще один способ отправки сообщений с сервера на клиент.Для этого вы должны использовать 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-запросов в минуту на одного пользователя чата.

...