【发布时间】:2013-01-30 12:07:37
【问题描述】:
我想在 Apache HTTP 客户端库的帮助下从 Android 设备调用 Rails Web 服务时克服以下情况
场景:
客户端(Android):发起 HTTP POST 请求(使用 Apache HTTP 客户端,JSON 作为交换格式)将少量记录插入服务器数据库(MySQL)。
服务器(Rails 中的 Web 服务):处理请求并将记录成功插入数据库,但同时超时 (SocketTimeOutException) 发生在客户端。
客户端(Android):超时时,重试执行相同的 HTTP POST 请求,并再次将相同的记录插入数据库并发生数据库不一致。
谁能帮我克服这种情况。
提前致谢
编辑:
我目前的情况:
1) 用户尝试通过填写和提交数据来使用 Android 应用进行注册。所以基本上 POST 服务包含发送到服务器(Rails 和 MySql)的所有必需用户
2) POST 请求由服务器处理,该过程主要负责将记录插入数据库,并以插入数据的 USER_ID 向客户端提供响应。
3) 轰!!数据已插入 MySql 数据库,但由于某种原因,Android 端存在SocketTimeOutException,因此 Android 端没有 USER_ID,用户尝试再次注册............数据库不一致和我很伤心:(
注意:步骤 3) 的发生非常罕见。但是当服务器太忙或有一些处理负载时,这种情况很常见。..
【问题讨论】:
-
我认为 基于会话的 Web 服务 是您所需要的。所以只有当您的服务器成功完成时会话才会过期..
-
您能否提供更多有关创建和维护基于会话的 Web 服务的信息......以及它将如何帮助我克服这个问题?
-
您可以尝试增加超时时间,但这不是最终的解决方案,因为包括超时在内的任何原因仍可能导致连接失败。
-
@MisterSmith 目前超时设置为 10 秒,我认为这很好。但如果超时时间增加,客户端(Android)将不得不等待更长的时间......所以又是这样一个问题。
-
不,超时是您必须在连接调用中等待服务器响应的最长时间。如果将其设置为 60 秒,并不意味着每次连接都需要 60 秒。但你是对的,这只是在踢罐子。
标签: android web-services ruby-on-rails-3.2 http-post httpclient