Кто-нибудь знает какой-нибудь способ или, возможно, считает возможным подключить Node.js к push-модулю 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-адрес, после которого следует / broadcast / sub = getIt. Когда появляется сообщение, оно запускает updateFeed.
Довольно простой и понятный ИМО.
Конфигурация Nginx http push-модуля
default_type application / octet-stream;
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 для любых вызовов / broadcast / sub, и он возвращает все ответы, отправленные на /broadcast/pub.
.
Довольно простой тоже. Эта часть не так сложна для понимания и хорошо документирована через Интернет. В большинстве случаев за этим стоит файл ruby или php, который выполняет трансляцию.
Моя идея состоит в том, чтобы трансляция node.js /broadcast/pub
. Я думаю, что это позволит мне иметь persistent streaming data
от сервера к клиенту без разрыва соединения. Я попробовал подход длинного опроса с циклическим запросом, но я думаю, что это будет более эффективным.
Или это не сработает.
Node.js file
Теперь, чтобы создать 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 действовать так, как это понимает Comet? Было бы очень приятно, и вы мне очень поможете.
Recources
используется
Чтобы использовать faye, мне нужно установить кометный клиент, но я хочу использовать тот, который поставляется с Nginx. Вот почему я не просто использую Фэй. Тот, что использует nginx, гораздо более оптимизирован.
дополнительный