我遇到了一个重大问题,希望有人可以提供帮助。
我们有使用Parse作为后端的网络和Android应用程序。我们遇到的问题都发生在两者上。我将解释Android问题。
我们使用REST API将数据保存到Parse.com。我们不使用SDK的原因是我们希望利用仅在RESTAPI中可用的批处理操作。
{
"requests": [
{
"body": {
"isFriable": false,
"haDetail": "",
"sizeOther": "",
"colourOther": "",
"texture": "",
"fieldInspection": {
"__type": "Pointer",
"className": "FieldInspection",
"objectId": "YS5bXHBwDu"
},
"surfaceSubType": {
"__type": "Pointer",
"className": "SurfaceSubType",
"objectId": "d4IL5k1pv5"
},
"size": {
"__type": "Pointer",
"className": "HomogenousMaterialSize",
"objectId": "ezr3uHDUvt"
},
"colour": {
"__type": "Pointer",
"className": "HomogenousMaterialColour",
"objectId": "NqYXJcOkPE"
}
},
"method": "POST",
"path": "/1/classes/HomogenousArea"
}
]
}
以上是我的要求。使用基本的默认HttpClient将其推送到https://api.parse.com/1/batch。
当我们执行HTTP请求时,它有时会挂起,它不会返回任何结果。每5或6个请求中就有一个会这样做。成功的后续请求中的完全相同的数据将会很好。问题是,在那时我们有重复的记录持续到Parse,因为我们的同步逻辑从未完成,因为我们没有得到响应。
Parse中有什么东西可以用来调试这样的请求吗?下面是我们正在使用的当前http客户端实现。注意:也从Square放入OkHttp并遇到完全相同的问题。
// Instantiate the http client to make the batch request
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost post = setupHttpPost(url);
// Assign the data to the post
StringEntity entity = new StringEntity(insertData);
post.setEntity(entity);
// Setup the response handler
ResponseHandler response = new BasicResponseHandler();
// Make the call to Post the new data
Object rersponse = httpClient.execute(post, response);
if (rersponse != null) {
return rersponse.toString();
}
return null;
答案 0 :(得分:0)
./batch的奇怪行为......
确保您没有错过解析错误响应。 IMO - 如果您没有密切关注http响应中实体的处理程序,有时可能会出现JSON解析错误或可能遗漏的内容....
我没有使用Parse batch api。我使用过多线程http客户端而没有看到你提到的流行的超时类型问题?
由于您使用REST,您应该能够在CURL客户端中包含一些测试调用,您可以使用CURL CLI开关进行检测以提供更多 - 调试...
由于您使用REST,您可以从批处理界面切换到多线程客户端(请参阅“线程”示例,请参阅org.apache处的“配置”示例...
狂野的猜测,但如果你分解你的批次可能背景更高数量的Http EXEC每个有更小的有效负载可能会更好的????
链接中的配置示例显示了如何按域配置池大小以及如何检测超时(conn timeout,req timeout等)。