2012-01-17 144 views
0

我正在使用XMPP服务器制作聊天应用程序。聊天应用程序运行良好,但我遇到了一个问题:在2个用户之间聊天时,我无法知道第一个用户的消息是否已到达服务器。使用XMPP服务器的聊天应用程序

那么如何知道来自第一个用户的消息是否到达服务器,而不必担心第二个用户是否在线或离线。

请帮助

我发送消息是这样的:

final SecureConnection sc = (SecureConnection)Connector.open("ssl://...", Connector.READ_WRITE); 
is = sc.openInputStream(); 
os = sc.openOutputStream(); 
this.reader = new XmlReader(is); 
this.writer = new XmlWriter(os); 

public boolean sendMessage(final String to, final String msg) { 
this.writer.startTag("message"); 
this.writer.attribute("type", "chat"); 
this.writer.attribute("to", to); 
this.writer.startTag("body"); 
this.writer.text(msg); 
this.writer.endTag(); 
this.writer.endTag(); 
this.writer.flush(); 
} 
+0

这种方法的作者是什么? – Lucifer 2012-01-17 11:07:24

+0

这是一个xml编写器,将数据写入XMPP服务器 – 2012-01-17 11:10:51

+0

当然,我知道,我想知道的是,它是哪个类的对象/变量? – Lucifer 2012-01-17 11:12:43

回答

0

你需要实现在你的代码的ACK/NACK通知。

+0

感谢您的回应,如何在我的代码中实现ACK/NACK?我读到这应该用于描述,但如何?顺便说一句,你的意思是客户端代码? – 2012-01-17 10:41:41

+0

当您向服务器发送任何消息时,服务器应在从客户机到服务器的连续消息到达的情况下响应“1”。所以这个“1”是客户端的ACK。如果客户端在特定时间内没有收到“1”,那么客户端应该重新发送消息 – Lucifer 2012-01-17 10:47:15

+0

那么服务器没有响应任何这就是为什么我问这个问题。欲了解更多信息,我正在使用openfire服务器,你确定这个信息?因为我测试了几百次而服务器没有回复 – 2012-01-17 10:55:06

3

如果您连接到服务器并发送消息,则可以合理确信消息到达服务器。如果客户端位于不可靠的网络上,有时候TCP连接会无声无息地中断,而且在检测到它们并关闭之前有一段时间。对此可能的解决方案(按照复杂性排序):

  • 使用XEP-0199定期ping服务器。
  • 实施XEP-0198。最终的可靠性,但更难以实施并需要服务器支持。

您似乎担心的另一个问题是user2看到该消息。我不知道你的应用程序,它是如何配置的,或者你希望如何工作。但是,大多数XMPP服务器会自动存储在脱机状态下发送给用户的消息。然后在用户上线时将它们交付给用户。有关更多信息,请参阅XEP-0160

最后,您可以使用消息收据了解user2何时接收/读取消息。这些在XEP-0184中描述,并且可能只有如果您关心的是您知道user2收到该消息,那么您确实需要实现这一点。

+0

嘿MattJ,你所谈论的所有内容都已经实现。我并不担心第二个用户。我只想知道我发送的消息是否到达服务器。如何使服务器回复发件人邮件已到达?谢谢 – 2012-01-18 08:42:32

+0

如果你说我说的一切都已经实现,那么你有XEP-0198,并且已经给你提供这些信息。发送消息后,只需发送,服务器在收到消息后会回复。 – MattJ 2012-01-18 13:42:16

相关问题