有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

当响应大小较大时,来自Android的java HTTP POST不会返回数据

当向服务器发出POST请求并处理服务器响应结果后,我遇到了一个问题,但当服务器写入数据时,有时数据无法传输到客户端,在写入时就死机了。write()函数。 我使用ApacheTomcat部署应用程序,每次服务器需要在gzip之前响应大约7m个数据,在gzip之后响应300k个数据

请帮忙

我的代码:

protected void dispatch(JSONObject request,
              Map<String, FormDataItem> formItems,
              HttpServletRequest servletRequest,
              HttpServletResponse servletResponse, SecurityToken token,
              String callback) throws JSONException, IOException {
        long timeGetData = 0;
        long begin = System.currentTimeMillis();

        String key = null;

        if (request.has("id")) {
              key = request.getString("id");
        }

        // getRpcHandler never returns null
        Future<?> future = getHandler(request, servletRequest).execute(
                    formItems, token, jsonConverter);

        timeGetData = System.currentTimeMillis();
        // Resolve each Future into a response.
        ResponseItem response = getResponseItem(future);
        ResponseItem responseTemp = (ResponseItem) response.getResponse();

        // Generate the output
        Writer writer = servletResponse.getWriter();

        if ("syndata.getAllDataFromServer".equals(request.getString("method"))) {
              if (responseTemp.getErrorCode() == 200) {
                    SynDataObject outObject = (SynDataObject) (responseTemp
                                .getResponse());
                    writer.write(jsonConverter.convertToString(outObject
                                .getParams()));
                    writer.write("\r\n");

                    for (int i = 0; i < outObject.getListTableData().size(); i++) {
                          TableDataObject subData = outObject.getListTableData().get(
                                      i);
                          int subDataLength = subData.getData().size();
                          int currentFarm = 0;
                          int factor = 1000;
                          int lastIndex = 0;

                          while (lastIndex < subDataLength) {
                                if ((currentFarm * factor + factor) > subDataLength) {
                                      lastIndex = (factor * currentFarm)
                                                  + (subDataLength - (factor * currentFarm));
                                } else {
                                      lastIndex = (factor * currentFarm) + factor;
                                }

                                TableDataObject chilData = new TableDataObject();
                                chilData.setTableName(subData.getTableName());
                                chilData.setTableColumns(subData.getTableColumns());
                                chilData.setPkField(subData.getPkField());

                                 chilData.setData(subData.getData().subList(
                                            currentFarm * factor, lastIndex));


                                writer.write(jsonConverter.convertToString(chilData));
                                writer.write("\r\n");
                                writer.flush();

                                ++currentFarm;
                          }
                    }
              } else {
                    Object result = getJSONResponse(key, response);
                    String content = jsonConverter.convertToString(result);

                    if (callback != null) {
                          writer.write(callback);
                          writer.write('(');
                    }

                    writer.write(content);

                    if (callback != null) {
                          writer.write(");\n");
                    }
              }
        } else {
              Object result = getJSONResponse(key, response);
              String content = jsonConverter.convertToString(result);

              if (callback != null) {
                    writer.write(callback);
                    writer.write('(');
              }

              writer.write(content);

              if (callback != null) {
                    writer.write(");\n");
              }
        }

  }

共 (1) 个答案

  1. # 1 楼答案

    每个浏览器都有一些请求超时值。 如果送达请求所需的时间或到达作者所需的时间。超过write()行,客户端连接将关闭

    所以你将无法向作者写入任何信息