【问题标题】:Long polling in android is blocking port 80android中的长轮询阻塞端口80
【发布时间】:2013-12-26 12:11:40
【问题描述】:

我在 ksoap 中使用长轮询技术,如下所示:

HttpTransportSE getMessagesTransport = new HttpTransportSE(URL, 60000);
getMessagesTransport.call(SOAP_ACTION, envelope);

如果我同时只调用一次 Web 服务,它工作正常。 ,但是如果我在请求另一个 Web 服务时调用另一个 Web 服务,直到另一个结束才调用它

似乎80端口在Android客户端被阻止,只允许向domain:port (domain:80)

发出一个请求

有什么方法可以增加连接数

(我担心不要使用 Comet arquitechture 或 Asyn WebServices)。

谢谢!!

【问题讨论】:

    标签: android jax-ws ksoap2 long-polling


    【解决方案1】:

    问题是我正在调用 2 个异步任务,如果 android 版本 >= HONEYCOMB,您必须在线程池中执行您的异步任务,因为一个锁定到另一个:

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
            new SendMessageToEventAsync(this, formattedMessageToSend)
                    .executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, "");
        } else {
            new SendMessageToEventAsync(this, formattedMessageToSend)
                    .execute("");
    

    【讨论】:

      【解决方案2】:

      我创建了一个通用类,以便在我们现在的版本中忘记。当我们创建 AsyncTask 时,我们总是扩展 AsyncTaskThreadPool。希望对你有帮助!

      public abstract class AsyncTaskThreadPool<T1, T2, T3> extends AsyncTask<T1, T2, T3> {
      
          public void ExecuteThreadPool(T1 param)
          {
              if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
                  this.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, param);
              } else {
                  this.execute(param);
              }
          }
      
          protected abstract T3 doInBackground(T1... params);
      
      
      }
      

      【讨论】:

      • 只是注释参数 T1 应该是 "T1... param"
      猜你喜欢
      • 1970-01-01
      • 2013-08-05
      • 2021-11-12
      • 2013-07-28
      • 1970-01-01
      • 2010-10-31
      • 1970-01-01
      • 1970-01-01
      • 2021-06-23
      相关资源
      最近更新 更多