ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Re[8]: Comet



Hello Andrew,

Во-от! В этом-то и состоит нетривиальность задачи:)

Очевидно, единственный способ -- это назначать всем коннектам из пула некие id-шники, которые надо а) как-то сообщать бэкенду и б) как-то принимать от бэкенда данные именно для этого id.

Навскидку могу предложить примерно такую схему. Nginx (если в конфиге включён определённый comet-флаг) передаёт бэкенду вместе с запросом и ID соединения (отдельным HTTP-заголовком, скажем X-Comet-чтототам). Если бэкенд желает, чтобы данное соединение оставалось "висящим", то он в ответе тоже указывает некий флаг-заголовок. Тогда nginx, отдав клиенту ответ, не закрывает с ним связь (тут нужно, чтобы ответ был "правильным" -- не содержал Content-Lenght и т.п.).

Теперь как послать данные нужному клиенту. Создаётся location с определённым comet-флагом, доступная только для бэкенда. Бэкенд в неё POST-ом в любой момент может что-то записать, указав, опять-таки, в HTTP-заголовке ID клиента-получателя. Nginx, если клиент с этим ID-ом ещё не отвалился, пересылает ему POST-данные, а бэкенду говорит "200 OK". Если же клиент отвалился, то -- 404.

Ну, естественно, можно и другие варианты придумать. Роль nginx-а тут исключительно в поддержании пула коннектов и маршрутизации данных между ними.

Hello David,

DM>> a) дepжит пocтoянныe coeдинeния c клиeнтaми и б) пpинимaeт oт
DM>> бэкенда дaнныe и paccылaeт иx в нyжныe coeдинeния.
DM>>
как он узнает что в какие-то соединения надо новые данные от бакендов
получить и засунуть ?



--
С уважением
Давид Мзареулян
david@xxxxxxxx






 




Copyright © Lexa Software, 1996-2009.