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

Rup*_*ert 4 postgresql gps google-maps node.js

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

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

POST http://127.0.0.1:3000/location/
Run Code Online (Sandbox Code Playgroud)

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

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

hgo*_*ebl 5

使用Socket.IO

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

您的网页(显示 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>
Run Code Online (Sandbox Code Playgroud)

编辑

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

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