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