Php 如何一次向web服务器发送多个值

Php 如何一次向web服务器发送多个值,php,android,mysql,database,hosting,Php,Android,Mysql,Database,Hosting,我的问题是,我每秒跟踪用户的位置,它在一分钟内在一个数组中生成60个值。我在服务器中编写了一个简单的php,将数据保存到mysql表中。 由于连接的性质(据我所知),我可以在android端使用简单的httppost对象为每个请求保存一条记录。(请求类似于:xxx.com/writelocation.php?lat=33.76&lon=45.0&alt=12000) 我试图通过使用asynctask来解决这个问题,但没有成功。连接速度慢,数据量大。连接需要一秒钟以上的时间才能完成,并且每秒钟都会

我的问题是,我每秒跟踪用户的位置,它在一分钟内在一个数组中生成60个值。我在服务器中编写了一个简单的php,将数据保存到mysql表中。 由于连接的性质(据我所知),我可以在android端使用简单的httppost对象为每个请求保存一条记录。(请求类似于:xxx.com/writelocation.php?lat=33.76&lon=45.0&alt=12000) 我试图通过使用asynctask来解决这个问题,但没有成功。连接速度慢,数据量大。连接需要一秒钟以上的时间才能完成,并且每秒钟都会出现一条新记录。我正在寻找一种方法,可以一次、每分钟左右发送多个值。到目前为止,除了直接访问远程数据库外,我找不到其他解决方案。 但我的主机不提供对mysql数据库的远程访问

我需要一个聪明而廉价的方法来解决我的问题:)你有什么建议?使用远程数据库(通过数据库托管)是唯一的解决方案吗


提前感谢。

Json编码非常快,带宽消耗非常小。我建议您使用json发送这些数据,然后在服务器端解析json并将数据插入数据库

要了解有关android中json的更多信息,请参阅


您觉得怎么样?

使用INSERT DELAYED而不是INSERT。此外,对于这种情况,MySQL并不是一个真正可伸缩的解决方案,也许最好使用MongoSQL来处理这么多的请求。此外,您还可以将服务器上的请求保存为文本文件,并每隔几秒钟或几分钟以批处理方式运行查询。每秒尝试发送每个新位置是一个基本的设计缺陷,我建议您避免使用此策略,因为您无法保证移动设备的网络可用性和延迟

实现这一点的方法是在本地缓冲数据,并将其分块提交给服务器。例如,收集十分钟的数据并一次性发送。请记住,除了您已经发现的网络延迟限制外,建立并断开连接会带来网络开销和电池寿命。因此,出于许多原因,最好在本地缓冲数据,并在合理的时间间隔后发送缓冲区

每次将数据发送到服务器时,请在POST请求中执行此操作。这是一种应该用于提交任意大小数据的请求,也意味着如果以后需要,可以使用TLS对数据进行加密

PHP

使用PHP,可以按如下方式构造多维POST/GET数组:

(假设这是查询字符串的一部分)
id[]=1&id[]=2&id[]=3

产生:

array(1) {
   "ID" => array(3) {
       [1] => string(1) "1"
       [2] => string(1) "2"
       [3] => string(1) "3"
   }
}
类似地,如果将文本放在方括号之间,则可以利用PHP的关联数组功能:

form[fName]=John和form[lName]=Doe和form[age]=20

产生

array(1) {
   "form" => array(3) {
       ["fName"] => string(4) "John"
       ["lName"] => string(3) "Doe"
       ["age"]   => string(2) "20"
   }
}
不用说,这对POST和GET都有效。您可以在应用程序中使用它,如下所示:

loc1[lon]=经度和loc1[lat]=纬度和loc2[lon]=经度和loc2[lat]=纬度

所以你得到:

array(2) {
   "loc1" => array(2) {
       "longitude" => string(9) "longitude"
       "latitude"  => string(8) "latitude"
   }
   "loc2" => array(2) {
       "longitude" => string(9) "longitude"
       "latitude"  => string(3) "latitude"
   }
}


MySQL

只需补充说明:与运行多个insert查询不同,您可以一次插入所有数据并获得一些速度优势。 例如

在上面,我们插入了两行数据

( "John", "Doe", "20" )
( "John", "Citizen", "20" )

此外,请确保您的数据正确无误。这可能因您使用的数据库API而异。

您发出的请求是http GET请求。POST可以向服务器发送更多数据(限制取决于服务器配置)。但在android中创建帖子与GET不同。你可以试试看,为什么不在第一分钟尝试将数据存储在数组()中?您将有时间在第二分钟内异步发送它们,并继续存储新数据。我已经解决了这个问题:我在JSONObject(lat、lon等)中收集信息,然后在JSONArray中创建一个包含60秒信息的数组,在php端使用HttpClient发送JSONArray,我通过
code
json=$\u请求['myjson']获取jsonarray;然后用
code
$locationInfo=json\u decode($json)解码;然后遍历这些值并将它们写入mysql。完成3G+连接大约需要3秒钟。一旦我弄清楚如何使用IntelliJ IDEA配置github,我将把代码上传到。非常感谢。难道你不认为PHP会话会比文件I/O更好吗?我已经更新了你关于插入延迟的建议的评论,因为我从来没有听说过它,而且它似乎很难在正确的情况下使用。非常好的建议。INSERT DELAYED非常棒:D特别是当您在数据库中存储一些日志时,您不太关心日志的确切顺序。MySQL在启动请求开销、本地缓冲区、POST请求和未来TLS验证方面处理得非常好。这里的建议非常好,我希望OP在开发应用程序时考虑到这些。非常感谢您的警告。我在一分钟的数组中缓冲信息。因此,我一直在寻找一种同时发送多行数据的方法。若我还并没有找到实现这一点的方法,我想通过直接连接将它们逐个发送到远程数据库。希望我能在这个伟大的社区的帮助下解决这个问题。是的,这就是解决方案。非常感谢你。我试图在对我的问题的评论中解释这个方法。
( "John", "Doe", "20" )
( "John", "Citizen", "20" )