【问题标题】:How to use node.js in a real time gps tracking application?如何在实时 gps 跟踪应用程序中使用 node.js?
【发布时间】:2020-11-03 09:44:26
【问题描述】:

我正在尝试了解 node.js 如何适合我的场景。

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

POST http://127.0.0.1:3000/location/

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

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

【问题讨论】:

  • Postgres LISTEN/NOTIFY with node.js bjorngylling.com/2011-04-13/… 可能是另一种选择。请记住,位置表上可能有很多来自不同设备的位置插入。如果特定用户只想监听 device1 更新,postgres 触发器将通知每个插入位置表的内容,即使是其他设备也

标签: node.js google-maps postgresql gps


【解决方案1】:

使用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)

【讨论】:

  • 感谢 hgoebl!实际上,您将 RoR 应用程序转移到 nodejs 的评论并不是一个坏主意!我可能会按照您的建议使用 socket.io 解决方案。我还找到了github.com/Adrianod/Open-GPS-tracker/blob/master/README.md 作为参考。干杯,
  • @rupert 你最后选择了socket io 吗?您是否需要在服务器端握手,或者设备失去连接并且您需要同步历史记录(在重新连接期间)?因为正常的 POST 会得到响应,除非您在收到更新时通过套接字触发握手。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-07
  • 2014-11-06
相关资源
最近更新 更多