2014-07-02 20 views
7

Tắt internet trên thiết bị di động trực tiếp gây ra sự cố trong ứng dụng trò chuyện của tôi. Thư không được lưu trữ trong bảng ngoại tuyến openfire khi Openfire vẫn hiển thị cho tôi trực tuyến khi ngắt kết nối đột ngột từ máy chủ. khi một nỗ lực relogin được thực hiện các tin nhắn đã được gửi trong thời gian đó bị mất.Tin nhắn bị mất do mất kết nối thông qua openfire

Tôi đang làm việc trên một ứng dụng trò chuyện, sau khi đăng nhập để mở, tôi có thể trò chuyện và những người dùng khác có thể thấy tôi trực tuyến nhưng vấn đề là nếu một người dùng mất kết nối như WIFI tắt, Trong tình huống như vậy Openfire không hiển thị của tôi trạng thái là ngoại tuyến và nó vẫn hiển thị Trực tuyến dẫn đến mất gói tin nhắn.

Vui lòng cung cấp cho tôi giải pháp mà tôi không thể giải quyết được.

Trên sidenote cách WhatsApp và các ứng dụng khác gửi tin nhắn. Họ có sử dụng chiến lược lưu trữ tin nhắn trên máy chủ và xác nhận hay tôi đang thiếu thứ gì đó ở đây.

Trả lời

1

Cả khách và máy chủ cần xác nhận rằng thư đã được gửi & gửi, ví dụ: bạn gửi thư cho người khác, những gì bạn có thể làm ở đây là bạn lưu thư này trên máy chủ của mình, từ máy chủ, thư này sẽ được gửi đến người nhận và chờ xác nhận của người nhận rằng thư đã được gửi, khi bạn nhận được xác nhận - hãy xóa thư khỏi máy chủ.

How whatsapp do it? Tôi tìm thấy câu trả lời này bởi Michael Donohue trên Quora

Whatsapp hoạt động trên cửa hàng và chuyển tiếp, Client WhatsApp sẽ lưu trữ bất kỳ thông điệp mà bạn gửi, và tiếp tục cố gắng để gửi nó đến các máy chủ WhatsApp. Khi ứng dụng di động của WhatsApp kết nối với máy chủ trò chuyện, quá trình lưu trữ và chuyển tiếp diễn ra theo cả hai hướng. Máy khách gửi bất kỳ thư đang chờ xử lý nào trong kho lưu trữ thư của nó đến máy chủ, trong khi máy chủ gửi tất cả các thông điệp tích lũy được định sẵn cho máy khách đó đến máy khách. Quá trình này được thực hiện trên cơ sở xác nhận. Điều này có nghĩa là tin nhắn được gửi liên tục cho đến khi phía bên kia xác nhận đã nhận được tin nhắn. máy chủ sẽ giảm thư khi chúng được xác nhận - không có bộ nhớ dài hạn. Trong khi khách hàng sẽ cập nhật giao diện người dùng để kiểm tra lại trạng thái khi mã ack đến, nhưng sẽ giữ lại thông báo.

-1

Trong ứng dụng khách Android sử dụng Smack, bạn phải tắt Stream Mananement ngay sau khi tạo XMPPTCPConnection và trước khi chạy connection.login().

connection.setUseStreamManagement(false); 

Tôi gặp sự cố này và mã này đã được giải quyết.

+0

Nếu 'userStreamManagement' đặt sai nên chúng tôi không thể nhận trạng thái tin nhắn' xác nhận' ở phía máy chủ. –

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