如何将带有位置的数据实时发送到服务器?我做对了吗?
Posted
技术标签:
【中文标题】如何将带有位置的数据实时发送到服务器?我做对了吗?【英文标题】:How send data with location to a server in real time? Did i do it right? 【发布时间】:2019-12-18 14:54:18 【问题描述】:我需要制作一个系统,android 应用程序会将用户的位置实时发送到服务器。然后在网站上(在同一台服务器上),您将能够看到用户(使用应用程序)如何旅行。就像您可以关注 uber eats 的食品供应商一样。
该项目目前已经制作完成并且运行良好,但我不相信我是否做得正确?
现在,android 应用程序每 1 秒读取一次用户的位置,并使用 POST 方法将其发送到服务器。例如:mydomain.com/gps.php?usertoken=XXX&latitude=XXX&longitude=XXX。每次 php 文件获取此数据时,都会将其保存在 mysql 数据库中。就是这样。
现在访问该站点的用户可以在地图上看到用户使用应用程序的位置(来自数据库的位置)。
这是正确的解决方案吗?我不应该使用任何其他方法吗?未来可能有几十个用户,这样的系统会高效吗?我恳请一些建议。我是初级程序员。
在 gps.php 文件中用于 Android 应用程序的代码:
$lat = $_POST['latitude'];
$long = $_POST['longitude'];
$login = $_POST['usertoken'];
//save location to database
$db = mysqli_connect('localhost', 'xxxx', 'xxxx', 'xxxx');
$db->query("UPDATE users SET latitude='$lat', longitude='$long' WHERE login='$login'");
$db->close();
【问题讨论】:
你应该使用带有set interval()
或websockets
的ajax来解决这个问题
使用 ajax 很好,1 秒更新是多余的,除非你需要每秒更新服务器端,大多数时候你不知道(不确定 android 但在 chrome 中,如果重新查询更多,它会呻吟每分钟一次),php 代码对 SQL 注入开放,这是在添加实时更新之前需要解决的更大问题。
【参考方案1】:
WebSockets 可能是您的解决方案。它们允许您在服务器和客户端之间建立双向连接。非常适合具有大量“流量”的应用程序 由于它将产生的开销较小。将数据从服务器推送到客户端的能力对于您的应用程序来说也非常简洁,因为它允许您随时更新客户端 服务器上发生了一些事情。
https://socket.io/ 是一个非常简洁的客户端和服务器库。对于 MySQL 部分,您可以使用类似 node.js 及其 mysql 包的东西
https://nodejs.org/en/
https://www.npmjs.com/package/mysql
【讨论】:
【参考方案2】:我认为,你的 rest api(http) 网络调用没有错。在大多数情况下,这是一个正确的解决方案。
但我认为您需要在 php 代理服务器中保持数据库连接。
因为服务器通常总是在运行。
在每个查询中重新连接到数据库是一项昂贵的工作。
【讨论】:
以上是关于如何将带有位置的数据实时发送到服务器?我做对了吗?的主要内容,如果未能解决你的问题,请参考以下文章