2012-11-12 38 views
5

Tôi đang sử dụng MQTT trong một ứng dụng Android, sử dụng lọ mới nhất như được tìm thấy trên trang Paho của Eclipse.MQTT Eclipse Paho client trên Android, ngắt kết nối treo và không bao giờ hoàn thành

Tôi đang kiểm tra kết nối theo cách thủ công bằng cách gửi xuất bản định kỳ theo QOS 1 và nếu nó không được phân phối theo thời gian chờ nhất định, tôi ngắt kết nối MQTT và kết nối lại. Khi kết nối dữ liệu bị mất sau đó lấy lại tôi cũng buộc một kết nối lại.

Vấn đề là phương pháp ngắt kết nối treo luồng và không bao giờ hoàn thành - ngay cả với thời gian chờ bằng 0 hoặc âm. Đó là nghĩa vụ phải có một thời gian chờ nội bộ của 30 giây nhưng nó đi dài qua này và không bao giờ hoàn thành.

Đối tượng MqttClient cần được ngắt kết nối nếu không nó nằm trong nền nhai dữ liệu. Những gì tôi đang làm là quay một chuỗi riêng biệt để ngắt kết nối MQTT rồi tạo một MqttClient mới hoàn toàn. Nó ngừng sử dụng dữ liệu nhưng đó là một giải pháp tồi vì luồng mới chỉ bị treo.

Bất kỳ ý tưởng nào?

Edit: Mở điều tra thêm nó dường như bị chặn trên cố gắng để ngăn chặn CommsReceiver tại dòng 70:

public void stop() throws IOException { 
    synchronized (lifecycle) { 
     //@TRACE 850=stopping receiver 
     trace.trace(Trace.FINE,850); 
     if (running) { 
      running = false; 
      try { 
       //@TRACE 851=stop: wait on lifecycle 
       trace.trace(Trace.FINE,851); 
       // Wait for the thread to finish. 
       lifecycle.wait(); // THREAD HANGS // 
      } 
      catch (InterruptedException ex) { 
      } 
     } 
    } 
} 

Trả lời

4

Sự cố này là do cửa sổ thời gian trong phiên bản ổn định của ứng dụng khách paho, nếu bạn sử dụng mã trong nhánh phát triển của kho paho. Bạn không nên đi qua vấn đề này bởi vì nó được đánh dấu là cố định trong lỗi này https://bugs.eclipse.org/bugs/show_bug.cgi?id=394066 mặc dù nó không phải là nhánh ổn định, tôi đã tìm thấy chi nhánh phát triển đáng tin cậy.

Các vấn đề liên quan