Вопрос

Кто-нибудь знает способ или, возможно, считает возможным подключение Node.js с помощью модуля NGINX HTTP-модуля для поддержания постоянного подключения между клиентом и браузером.

Я новичок в кометах, так что просто не понимаю издательства и т. Д. Может быть, кто-то может помочь мне с этим.

То, что я настроил до сих пор, это следующее. Я загрузил плагин jQuery.comet и настроить следующий базовый код:

Клиент JavaScript

<script type="text/javascript">

    function updateFeed(data) {
        $('#time').text(data);
    }

    function catchAll(data, type) {
        console.log(data);
        console.log(type);
    }

    $.comet.connect('/broadcast/sub?channel=getIt');
    $.comet.bind(updateFeed, 'feed');
    $.comet.bind(catchAll);

    $('#kill-button').click(function() {
        $.comet.unbind(updateFeed, 'feed');
    });
</script>

То, что я могу понять из этого, состоит в том, что клиент будет продолжать слушать URL-адрес, а затем / широковещатель / sub = Getit. Когда есть сообщение, это будет пожарное обновление.

Довольно базовый и понятный IMO.

NGINX HTTP Push Module Configure

По умолчанию_type приложение / октет-поток; sendfile on; keepalive_timeout 65; push_authorized_channels_only Off;

server {
  listen       80;
  location /broadcast {
    location = /broadcast/sub {
      set $push_channel_id $arg_channel;
      push_subscriber;
      push_subscriber_concurrency broadcast;
      push_channel_group broadcast;
    }

    location = /broadcast/pub {
      set $push_channel_id $arg_channel;
      push_publisher;
      push_min_message_buffer_length 5;
      push_max_message_buffer_length 20;
      push_message_timeout 5s;
      push_channel_group broadcast;
    }
  }
}

Хорошо, теперь это говорит Nginx прослушать в порту 80 для любых вызовов на / широковещание / SUB, и он вернет любые ответы, отправляемые в / вещаю / паб.

Довольно базовый и. Эта часть не очень трудно понять, и хорошо документирована через Интернет. Большую часть времени стоит рубин или файл PHP за этим, который делает вещание.

Моя идея состоит в том, чтобы иметь телевизор Node.js /broadcast/pub. Отказ Я думаю, что это позволит мне иметь persistent streaming data С сервера к клиенту без нарушения соединения. Я попробовал долговечный подход с зацикливанием запроса, но я думаю, что это будет более эффективным.

Или это не будет работать.

Node.js Файл

Теперь, чтобы создать Node.js, я потерян. Во-первых, я не знаю, как у Node.js работает таким образом.

Настройка, которую я использовал для длительного опроса, заключается в следующем:

var sys = require('sys'), 
http = require('http');
http.createServer(function (req, res) {
    res.writeHead(200, {'Content-Type': 'text/html'});
    res.write(new Date());
    res.close();
    seTimeout('',1000);
}).listen(8000);

Это слушает порта 8000 и просто пишет в переменной ответа.

Для длительного опроса мой nginx.config выглядел что-то вроде этого:

server {
  listen      80;
  server_name _;

  location / {
    proxy_pass   http://mydomain.com:8080$request_uri;
    include      /etc/nginx/proxy.conf;
  }
 }

Это только что перенаправила порт 80 до 8000, и это работало нормально.

У кого-нибудь есть идея о том, как у Node.js act на пути это понимает комета. Было бы очень приятно, и вы будете помогать мне много.

Поощрения

использовал

Чтобы использовать FAYE, я должен установить Comet Client, но я хочу использовать прилагаемый с NGINX. Вот почему я не просто использую Faye. Один используемый Nginx намного более оптимизирован.

дополнительный

Это было полезно?

Решение

Смотря на ваша ссылка Мне кажется, что все Pub / Sub Work выполняется Nginx, Ruby Code используется только для тестирования его и отправки сообщений. Клиенты все еще используют длинные опрос:

В скрипте выше, каждые пять секунд издатель испускает новое событие на наш сервер Nginx, который, в свою очередь, толкает данные двум подписчикам которые имеют длинные избирательные соединения открытыми и ждут данных. Как только сообщение отправляется каждому подписчику, nginx закрывает свои соединения и клиенты, затем немедленно восстановить их ждать следующего доступного сообщения.

NGINX служит простым ретранслятором для сообщений (очень умная настройка BTW, спасибо за ссылку).

Чтобы закрыть его: браузеры не способны к такого рода соединения, которое вы пытаетесь сделать. Это что Websockets. были изобретены для.

Позже я сделаю какой-нибудь код в Node.js, чтобы использовать эту настройку с Nginx (я тоже заинтересован в ней).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top