我回答了这个问题
但没有答案。
当某个连接由于某种网络问题而丢失时,服务器无法识别它,并继续向永久丢失的断开连接的接收者发送消息。
我有一个解决方案,在这个解决方案中,我从服务器上ping客户机,当客户端断开连接时,服务器可以在10秒后识别它,并在队列中保存更多的消息,以防止它们丢失。
我的问题是,通过使用我知道psi和其他许多xmpp客户端正在使用的其他方式,可以实现100%的失败保存消息传递。
在ios方面,我使用的是xmppframework
发布于 2014-02-04 18:09:38
一种方法是在服务器上使用高级消息处理 (AMP);另一种方法是在客户端使用讯息递送收据。
前者需要启用AMP的服务器实现,启动客户端必须能够告诉服务器它需要什么样的交付状态报告(它需要如果无法传递,将返回一个错误。)。请注意,无论如何这并不是防弹的,因为目标客户端失去与服务器的连接时和服务器机器上的TCP堆栈检测到这一点并将其告知服务器之间存在一个窗口:在此窗口期间,服务器认为发送给客户端的所有内容都可以发送,因为TCP层中没有消息边界的概念,因此如果服务器进程设法将消息节的XML填充到TCP连接的系统缓冲区中,它认为要发送的部分--一旦TCP堆栈说连接丢失了,它就无法知道它的流中哪些位没有到达接收器。
后者是防弹的,因为客户端依赖于关于消息接收的显式通知。不过,这确实增加了人们的口舌。作为回报,这个特性不需要服务器支持-它只在客户端实现。
发布于 2014-04-24 09:11:55
和XEP-0198一起去享受.
http://xmpp.org/extensions/xep-0198.html
https://stackoverflow.com/questions/21557814
复制相似问题