如何在实时gps跟踪应用程序中使用node.js?

时间:2013-11-16 00:21:16

标签: node.js google-maps postgresql gps

我试图了解node.js如何适合我的场景。

目前,移动设备通过POST将Rps后端发送到Rails后端。移动设备每分钟发送一次。

POST http://127.0.0.1:3000/location/

我的RubyOnRails网络应用程序可以在地图上显示位置的历史记录,没问题。

但我在nodejs方面的经验还处于起步阶段,我想了解如何在实时GPS更新时显示地图。

提前感谢您阅读此内容..

1 个答案:

答案 0 :(得分:4)

使用Socket.IO

大多数教程都会显示某种聊天应用程序。在您的情况下,通信只是单向的。并且您的设备未通过WebSockets连接,但仅在没有通道的情况下POST新坐标(设备不会订阅来自服务器的事件)。

您的网页(显示Google地图控件)通过socket.io连接到您的Node.js服务器,并从您的服务器(socket.emit)获取新的坐标。您必须以某种方式记住哪些“新坐标”事件必须发布到哪些侦听网络客户端。

当然,如果您不仅要显示设备的新坐标,还需要网页最近坐标的初始列表。您也可以通过套接字传递它们,但是由于您需要某种身份验证,因此对于第一批设备GPS跟踪,REST呼叫可能更清晰。

因此,当设备更新其位置时,您只需要找到该设备的已连接侦听器和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>

修改

当您的网页和新坐标POST通过RoR传递时,您必须触发从Ruby到node.js服务器端的事件。基本上你可以通过REST从Ruby调用你的node.js应用程序,但还有其他选项,如 Redis pub / sub或dnode ruby

(评论)我将RoR应用程序迁移到node.js; - )(/ comment)