Форум сайта python.su
Привет, может кто подскажет какую-нибудь идею.
Дано: браузер, основной вебсервер, куча дополнительных вебсерверов с бекендами.
Запрос из браузера попадает на основной вебсервер, который в twisted выполняет асинхронно некоторую небольшую логику, запросы в базу и делает запросы к множеству удаленных вебсерверов.
Ответы от них приходят неравномерно и сразу по одному отправляются клиенту. Реализация когда ответ целым пришел - это стандартная вещь.
А как возможно реализовать такое проксирование, если ответы от удаленных агентов приходят в соединении с задержками по-строчно или по-символьно? Такое возможно когда удаленный вебсервер не делает кеширования от бекендов. Для нгинкса это можно выключением proxy_cache, lighttpd это по умолчанию использует.
Twisted используется потому что возможно множественное одновременное обращение клиентов и для кажного клиента делается проксирование на десяток удаленных агентов-бекендов.
Офлайн
alrondНе очень понимаю, почему тебя так заботит такая ситуация. С точки зрения тебя, как клиента удаленного сервера, не должно волновать как он тебе их посылает и с какой скоростью отдает ответы. На уже твоего клиента ты же их всё-равно отдаешь целиком подряд, а не вперемешку, да?
А как возможно реализовать такое проксирование, если ответы от удаленных агентов приходят в соединении с задержками по-строчно или по-символьно?
Офлайн
В том то и дело, что и своему клиенту я отдаю и кусками, и вперемешку. Могу отдать как одну строку с одной удаленной точки, а потом другую строку из другой точки, и затем вторую строку с первой точки. А могу и 2-3 строки с одного, и строку с другого. Обработкой всего хозяйства на клиенте занимается своя часть на яваскрипте.
Там не совсем комет используется, а постоянные соединения с пересоединением при получении ответа. На хабре есть небольшой пример, где серверная часть на перле: http://habrahabr.ru/blogs/hi/69457/
С этой частью проблемы не возникают, на твистеде за основу взял http://www.olivepeak.com/blog/posts/read/simple-http-pubsub-server-with-twisted
И полные ответы от удаленных точек отдавать тоже не проблема с получением через twisted.web.client.getPage
А вот чтобы эти ответы построчно…Потому как один ответ от точки может длиться от 1 до 20 секунд с строчкой в секунду или две
Чтобы понятней немного было я расскажу что там замешано. Хочу реализовать доступ пользователям к мониторинговым точкам проекта http://www.wipmania.com/. То есть одновременный запуск пингов и трассировок со всех точек со всего мира. Сейчас система работает только для внутренних нужд по работе с базой, поэтому клиент один. И прекрасно обходимся стандартными средствами. А когда юзеров сотни и для каждого делать запрос к 45 удаленным серверам - то тут уже совсем другой подход нужен. Причем получение данных с каждого сервера не должно отражаться на данных с других, а отображаться должны одновременно по мере поступления.
Отредактировано (Окт. 22, 2009 00:39:32)
Офлайн