如何一次将多个值发送到Web服务器

时间:2012-11-29 13:45:37

标签: php android mysql database hosting

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

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

提前致谢。

4 个答案:

答案 0 :(得分:3)

<强> 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 INTO `users` ( `fName`, `lName`, `age` ) VALUES ( "John", "Doe", "20" ),( "John", "Citizen", "42" )

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

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

另外,请确保您的数据正确escaped。这可能会因您使用的数据库API而异。

答案 1 :(得分:2)

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

要了解更多关于android的abou json,请参阅http://www.vogella.com/articles/AndroidJSON/article.html

你怎么看?

答案 2 :(得分:2)

使用INSERT DELAYED而不是INSERT。对于这种情况,MySQL也不是一个真正可扩展的解决方案,也许最好使用MongoSQL来满足这一要求。您也可以将请求作为文本文件保存在服务器上,并且每隔几秒或几分钟以批量运行查询

答案 3 :(得分:2)

尝试每秒发送一个新位置是一个基本的设计缺陷,我建议避免使用此策略,因为您无法保证移动设备的网络可用性和延迟。

这样做的方法是在本地缓冲数据,并将其以块的形式提交给服务器。例如,收集十分钟的数据并一次性发送。请记住,除了您已经发现的网络延迟限制之外,建立然后拆除连接会产生网络开销和电池寿命限制。因此,由于许多原因,您可以在本地缓冲数据并在合理的间隔后发送缓冲区。

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