2013-11-16 7 views
0

Я пытаюсь понять, как node.js поместится в моем сценарии.Как использовать node.js в приложении для отслеживания gps реального времени?

В настоящее время мобильное устройство отправляет GPS-координаты в Rails-сервер через POST. Мобильное устройство отправляет его каждую минуту.

POST http://127.0.0.1:3000/location/ 

Мое веб-приложение RubyOnRails может отображать историю местоположений на карте, без проблем.

Но мой опыт в nodejs все еще находится в зачаточном состоянии, и я хотел бы понять, как отображать карту для обновления GPS в режиме реального времени, как они приходят в.

Заранее спасибо за чтение этого ..

+0

Postgres СЛУШАЙ/NOTIFY с node.js http://bjorngylling.com/2011-04- 13/postgres-listen-notify-with-node-js.html может быть альтернативой. Помните, что в таблице местоположений может быть много вложений местоположения из разных устройств. Если конкретный пользователь хочет прослушивать только обновления устройства1, триггер postgres уведомит каждую вставку, сделанную в таблицу местоположений, даже другими устройствами. – Rupert

ответ

3

Используйте Socket.IO.

В большинстве учебных пособий показано какое-то чат-приложение. В вашем случае сообщение является только однонаправленным. И ваше устройство не подключено через WebSockets, но только POSTs новые координаты без обратного канала (устройство не подписывается на события с сервера).

Ваша веб-страница (показывающая элемент управления Google Maps) подключается к вашему серверу Node.js через socket.io и получает новые координаты, сдвинутые с вашего сервера (socket.emit). Вы должны как-то вспомнить, какие «новокоординатные» события от устройств должны быть опубликованы, к которым прослушиваются веб-клиенты.

И, конечно, вам нужен начальный список последних координат вашей веб-страницы, если вы хотите показать не только новые координаты устройства. Вы также могли бы доставлять их через сокеты, но поскольку вам понадобится какая-то аутентификация, возможно, вызов REST более ясен для первой популяции GPS-треков устройств.

Поэтому, когда устройство обновляет свое местоположение, вам нужно только найти подключенные слушатели для этого устройства и emit("new-coordinate", {lat: ..., lng: ..., deviceId: ...} событий на карты. В веб-странице, вы получаете события и обрабатывать их, как это:

<script src="/socket.io/socket.io.js" type="text/javascript"></script> 
<script type="text/javascript"> 

$(function() { 

    if (typeof io === 'undefined') { 
     return; // socket.io not loaded 
    } 
    var socket = io.connect(); 
    socket.on('new-coordinate', function (data) { 
     console.log('arrived', data); 

     $(document).trigger('new-coordinate', data); 

     // or just directly update your map ... 

    }); 

}); 

</script> 

Редактировать

Как ваш веб-страницы и новые координаты должностям доставляются через RoR, вы должны триггером события от Ruby до node.js на стороне сервера. В основном вы можете вызвать приложение node.js из Ruby через REST, но есть и другие варианты, такие как Redis pub/sub или dnode ruby.

(комментарий) Я бы перенести приложение RoR на node.js ;-) (/ комментарий)

+1

Спасибо hgoebl! Собственно, ваш комментарий о переносе приложения RoR на nodejs - неплохая идея! Я мог бы пойти с решением socket.io, как вы рекомендовали. Я также нашел https://github.com/Adrianod/Open-GPS-tracker/blob/master/README.md в качестве ссылки. Ура, – Rupert

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