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