- PVSM.RU - https://www.pvsm.ru -
От переводчика: MeteorJS [1]— открытый (MIT) фулстек JavaScript фреймворк (и клиент и сервер). Текущая версия 0.6.6.3 — в начале 2014 планируется выход версии 1.0. Публикации на хабре: 1 [2], 2 [3], 3 [4].
В статье обзор сетевой архитектуры Метеор-приложения.
Приложение Метеор, с точки зрения браузеров, прокси-серверов, маршрутизаторов и других сетевых компонентов, является, по сути, обычным веб-приложением. Хотя, на самом деле, Метеор-приложение состоит из двух главных частей: часть, которая работает внутри браузера и часть, которая работает как сервер. Эти две части настроены таким образом, чтобы взаимодействовать друг с другом способом, характерным для многих современных веб-приложений (таких, как Gmail [5] или Trello [6])

Метеор позволяет разработчикам создавать приложения не заботясь о сложностях клиент-серверного взаимодействия.
Если копнуть поглубже, Метеор обрабатывает три типа запросов. Вот они:
Статические файлы — это картинки и другие подобные ресурсы из папочки /public. Метеор обрабатывает эти файлы автоматически при запуске.
Дополнительно, Метеор минифицирует и склеивает все JavaScript (включая шаблоны, которые предварительно компилируются в JavaScript) и CSS файлы, отдавая их как статические.
DDP [7] — это протокол, который Метеор использует для взаимодействия клиентской и серверной части. Все клиентские подписки на данные, удаленный вызов процедур и операции MongoDB — все это происходит с использованием протокола DDP. При этом — это достаточно легковесный протокол. Сообщения можно просматривать при помощи удобного инструмента — ddp-analyzer [8].
Не смотря на то, что в официальной документации пока еще нет информации об этом, Метеор может обрабатывать HTTP-запросы, подобно другим обычным приложениям. Например, загрузка файлов обрабатывается Метеором, как HTTP-запросы. Прочтите вопрос [9] на StackOverflow, чтобы узнать подробности.
Хотя Метеора прослушивает только один порт, внутри он работает, как два отдельных сервера:

HTTP сервер используется для передачи статических файлов и обработки HTTP запросов. Для этих целей в Метеор используется connect [10] Node.js модуль.
DDP сервер обрабатывает все публикации данных, MongoDB операции и Метеор методы. Метеор использует SockJS [11], в качестве транспорта. По существу, DDP — это SockJS сервер, доработанный Метеор.
Можно масштабировать Метеор HTTP и DDP серверы, запустив несколько экземпляров Метеор, подключенных к одной и той же MongoDB базе, но результат не будет идеальным. Это из-за того, каким образом Метеор опрашивает MongoDB на изменения — если один экземпляр Метеора обновил данные в MongoDB, может пройти несколько секунд прежде, чем остальные экземпляры увидят это обновление и распространят его подключенным пользователям.
Чтобы проиллюстрировать это, представьте, что два экземпляра Метеор (А и Б, с соответствующими HTTP и DDP серверами в каждом) обслуживают один и тот-же чат. Перед ними находится прокси-сервер, случайным образом подключающий пользователей к одному из этих экземпляров. Если кто-нибудь, подключенный к экземпляру A, напишет сообщение в чат, пользователи подключенные к экземпляру Б не увидят его в реальном времени, им придется ждать несколько секунд, пока сервер Б не осознает изменение и не распространит его в их браузеры.
В следующих статьях, я покажу, как настроить Метеор и MongoDB, чтобы избавиться от этого эффекта.
Такая логика опросов очень дорого обходится [12], чтобы ее можно было использовать на рабочем сервере, лучшим решением было бы задействовать MongoDB Oplog. В Метеор 1.0 так и будет, пока же можно использовать Smart Collections [13].
От переводчика: если кому-то интересно, на мой взгляд лучшими ресурсами по Метеор на данный момент являются:
Автор: zag2art
Источник [16]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/javascript/50665
Ссылки в тексте:
[1] MeteorJS : https://www.meteor.com/
[2] 1: http://habrahabr.ru/post/166885/
[3] 2: http://habrahabr.ru/post/204262/
[4] 3: http://habrahabr.ru/post/148648/
[5] Gmail: https://gmail.com/
[6] Trello: https://trello.com/
[7] DDP: https://github.com/meteor/meteor/blob/devel/packages/livedata/DDP.md
[8] ddp-analyzer: http://meteorhacks.com/discover-meteor-ddp-in-realtime.html
[9] вопрос: http://stackoverflow.com/questions/15059125/how-to-serve-http-requests-over-meteor
[10] connect: https://github.com/senchalabs/connect
[11] SockJS: https://github.com/sockjs/sockjs-node
[12] очень дорого обходится: http://meteorhacks.com/introducing-smart-collections.html#poll_operation_is_very_expensive_lets_discuss_why
[13] Smart Collections: http://meteorhacks.com/introducing-smart-collections.html
[14] Evented Mind: https://www.eventedmind.com/feed
[15] MeteorHacks: http://meteorhacks.com/
[16] Источник: http://habrahabr.ru/post/205878/
Нажмите здесь для печати.