Нужна помощь с настройкой кода Comet Comet
-
24-09-2019 - |
Вопрос
Кто-нибудь знает способ или, возможно, считает возможным подключение 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 на пути это понимает комета. Было бы очень приятно, и вы будете помогать мне много.
Поощрения
использовал
- Пример, где это делается с Ruby вместо Node.js
- jquery.comet.
- Главная страница NGINX HTTP Push-модуля
- Faye: Comet Client и сервер для Node.js и стойки
Чтобы использовать FAYE, я должен установить Comet Client, но я хочу использовать прилагаемый с NGINX. Вот почему я не просто использую Faye. Один используемый Nginx намного более оптимизирован.
дополнительный
Решение
Смотря на ваша ссылка Мне кажется, что все Pub / Sub Work выполняется Nginx, Ruby Code используется только для тестирования его и отправки сообщений. Клиенты все еще используют длинные опрос:
В скрипте выше, каждые пять секунд издатель испускает новое событие на наш сервер Nginx, который, в свою очередь, толкает данные двум подписчикам которые имеют длинные избирательные соединения открытыми и ждут данных. Как только сообщение отправляется каждому подписчику, nginx закрывает свои соединения и клиенты, затем немедленно восстановить их ждать следующего доступного сообщения.
NGINX служит простым ретранслятором для сообщений (очень умная настройка BTW, спасибо за ссылку).
Чтобы закрыть его: браузеры не способны к такого рода соединения, которое вы пытаетесь сделать. Это что Websockets. были изобретены для.
Позже я сделаю какой-нибудь код в Node.js, чтобы использовать эту настройку с Nginx (я тоже заинтересован в ней).