gpt4 book ai didi

android - 在断开连接(包括断开的 TCP 连接)的情况下以安全的方式重新使用 asmack 连接或重新创建它?

转载 作者:太空宇宙 更新时间:2023-11-03 11:13:21 25 4
gpt4 key购买 nike

我正在编写一个聊天应用程序,我正在使用 asmack 客户端库(感谢 Flow 维护它:))。问题是我不知道如何处理断开连接(正常情况,由连接监听器通知或断开的 TCP 引起的)

假设我在线程 A 上创建连接,即我在同一个线程上调用连接和登录。

如果出于任何原因我将断开连接,那么下次我应该:

  • 重用声明为 volatile 的相同 XMPPConnection 引用,并在另一个线程上调用它的连接? (因为 Android 不允许我在主线程上调用 IO?)。我不太喜欢这个想法,因为 XMPPConnection 中的大多数变量都不是 volatile 的,因此从多个线程调用同一个 XMPPConnection 上的连接(一次一个,所以每次断开连接后我都会记得在一个新线程上连接)可能会有问题关于线程安全。

  • 重新创建 XMPPConnection 并清除旧的?这也是一个问题,因为在转换到第二个连接时,您可能会丢失一些消息。我正在考虑使用队列来保存我的消息并在连接可用时立即写入它们。

我知道 XMPP 提供 ping 来检测服务器是否还在,但如果你在 1 分钟内执行 ping,但连接断开(你从你连接到的无线路由器上拔下 LAN 电缆phone,那么 Android 不会通知你连接丢失,你仍然可以在套接字上发送消息一段时间),如何实现消息发送的完整性?

我正在考虑同步发送一些消息 (ping),比如 getRoster 是在 XMPPConnection 中实现的。这样,如果我在超时后没有收到消息(smack 中的默认值为 5 秒),那么我将断开与 XMPP 的连接,假设我的连接已断开。您认为依赖超时是个好主意,还是我会搞砸移动数据连接?

我想制作的应用程序具有WhatsApp 的风格,因此它应该离线工作并在重新登录时重新发送消息。如果您对此有一些建议,请分享。

非常感谢,

最佳答案

如果你想在第一次建立连接后一直保持连接,那么我认为你可以尝试在 android 的 Service 类中保持你的连接。

The app that I want to make has WhatsApp's style, so it should work offline and resend messages when it relogins

您需要制作一个广播接收器来监控您的数据连接何时关闭和打开。根据该事件,您需要再次重新建立 xmpp 连接(换句话说再次启动该服务)

此外,这很简短,但在您的情况下还有很多事情需要管理。我建议使用我最喜欢的开源应用程序之一 GTalkSMS这可能会帮助您了解如何处理 xmpp 连接。

关于android - 在断开连接(包括断开的 TCP 连接)的情况下以安全的方式重新使用 asmack 连接或重新创建它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21294816/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com