【问题标题】:Too long time to send a json object from iphone to a java servlet将 json 对象从 iphone 发送到 java servlet 的时间太长
【发布时间】:2012-02-13 03:36:29
【问题描述】:

我们正在开发一个 iphone 应用程序,它将用户去过的位置的 json 字符串发送到部署在谷歌应用程序引擎上的网络应用程序 (JAVA)。我们使用 htpp 请求来发送这些字符串。我们的问题是字符串有时很大,这需要很长时间。还有其他方法吗?

【问题讨论】:

    标签: ios json http google-app-engine servlets


    【解决方案1】:

    您可以压缩 JSON。这是 GAE 的一段代码:

    JSONObject json = new JSONObject(uncompress(Base64.decode(encodedJSONData)));
    

    这是解压方法:

    protected String uncompress(byte[] compressedData) throws IOException {
        StringBuffer data = new StringBuffer();
        GZIPInputStream stream = new GZIPInputStream(new ByteArrayInputStream(compressedData));
        BufferedReader br = new BufferedReader(new InputStreamReader(stream));
        String line;
        while ((line = br.readLine()) != null) {
            data.append(line);
        }
        return data.toString();
    }
    

    【讨论】:

    • base64 编码压缩数据绝对没有意义,除非是浪费空间。
    • Base64 编码是通过 HTTP 请求发送所必需的。你建议另一种方式?
    • 不,不是。你可以在 HTTP 请求中发送二进制数据就好了。
    【解决方案2】:

    如果您的系统正在发送位置集合,请尝试不要一次发送所有位置,而是将整个集合拆分为小块,并以您估计的大小不会花费太多时间。

    另一个想法:如果您将此发送作为后台进程进行,主进程(如在用户界面中)不应该受到惩罚。

    【讨论】:

    • 我们之前遇到过请求超时的问题,所以我们不得不将字符串分块,所以现在我们实际上是分块发送集合,但是仍然需要很长时间,虽然它总是有效。在后台发送是一个不错的选择,因为它不会干扰 UI 和用户体验。但我想知道的是,为什么更大的文件(例如照片)在 Facebook 或 twitter 等应用程序中上传得如此之快?他们是否使用其他协议?
    猜你喜欢
    • 1970-01-01
    • 2017-06-22
    • 2014-10-16
    • 2017-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多