2012-04-11 3 views
12

После просмотра Meteor Framework screencast. Я заметил, что изменение базы данных плавно изменяет данные в браузере. Обычно AJAX просто перезагружает часть страницы каждые несколько секунд, но здесь я не заметил перезагрузки браузера. Как они достигли этого в Метеор? Является ли он зависимым от Node.js?Как метеорит обновляет браузер?

ОБНОВЛЕНИЕ: Тоби Кэтлин задает еще один интересный вопрос. Как Meteor обрабатывает разные браузеры?

+0

Смотрите также [горячий код толкает] (http://meteor.com/blog/2012/02/09/hot-code-pushes) –

ответ

5

Существует несколько методов, позволяющих серверу вставлять данные в браузер без необходимости просмотра браузера. Термин для такой технологии - Comet [wikipedia.org], и большинство методов связано с AJAX (там был отбеливатель под названием Comet и чистящий продукт под названием Ajax). Существует несколько типов соединений: длительный опрос, потоковое XHR, вечный кадр, сервер-отправка-события и веб-порты. Socket.IO - хорошая библиотека, которая предоставляет типы соединений для потоковых серверов.

Вам нужен сервер, который будет поддерживать соединения Comet. Вы можете google для текущих, но с верхней части головы: node.js, торнадо, cometd, orbited, потоковая передача Jetty

Я бы предположил, что Metor будет использовать разные типы соединений в зависимости от возможностей браузера, например websocket для Chrome и длительный опрос для IE. Если кто-нибудь может дать более конкретный ответ, мне было бы интересно.

+0

Использование WebSockets вам не нужно для получения запросов на запрос браузера из-за постоянного соединения, установленного между браузером и сервером. Сервер может отправлять данные клиенту до тех пор, пока они подключены. – moka

+0

Если он использует socket IO, я верю, что он вернется к длинному опросу для старых браузеров. Для новых он откроет webSocket – climboid

+0

Комета теперь известна W3C как Server Sent Events (SSE). См. Http://stackoverflow.com/questions/1964494/how-to-make-all-connected-browsers-reload-initiated-by-a-server-side-event –

17

Они используют как Session, так и Meteor.autosubscribe (от Meteor API), чтобы гарантировать, что изменения отражаются на клиентах.

Эти API-интерфейсы Meteor используют XHR (XMLHttpRequest) от SockJS. SockJS - утилита эмуляции WebSocket. Поэтому, когда что-то меняется на сервере, SockJS обеспечивает отправку XHR, а измененные данные - в ответ JSON.

Да, Метеор полностью зависит от Node.js. Из Метеора Документов

метеора приложения представляет собой сочетание JavaScript, который работает внутри клиента веб-браузера, JavaScript, который работает на сервере Метеора внутри контейнера Node.js, и все поддерживающие HTML фрагменты, правила CSS , и статические активы. Meteor автоматизирует упаковку и передачу этих различных компонентов. И это довольно гибко в отношении того, как вы решили структурировать эти компоненты в своем дереве файлов.

Единственным ресурсом сервера является JavaScript. Meteor собирает все ваши файлы JavaScript, исключая все, что находится под клиентским и общедоступным подкаталогами, и загружает их в экземпляр сервера Node.js внутри волокна. В Meteor код вашего сервера работает в одном потоке для каждого запроса, а не в асинхронном обратном вызове, типичном для Node. Мы считаем модель линейного исполнения более подходящей для типичного кода сервера в приложении Meteor.

Источники: http://docs.meteor.com/ и https://github.com/meteor/meteor

Смежные вопросы