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 更新。
使用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)
归档时间: |
|
查看次数: |
15550 次 |
最近记录: |