使用XMPP Server聊天应用程序

时间:2012-01-17 10:23:22

标签: blackberry java-me xmpp

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

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

请帮助

我发送的信息是这样的:

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();
}

2 个答案:

答案 0 :(得分:3)

如果您已连接到服务器并发送消息,则可以合理地确信消息已到达服务器。如果客户端位于不可靠的网络上,有时TCP连接会以静默方式中断,并且在检测到它们并且它们已关闭之前需要一段时间。可能的解决方案(按复杂程度排列):

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

您似乎担心的另一个问题是user2看到了该消息。我不知道您的应用程序,它的配置方式或您希望它如何工作。但是,大多数XMPP服务器会自动存储在用户离线时发送给用户的消息。然后,当他们上线时,他们会被发送给用户。有关详细信息,请参阅XEP-0160

最后,您可以使用邮件收据来了解user2何时收到/阅读邮件。这些在XEP-0184中描述,如果您关心的只是知道user2收到了消息,那么您可能真正需要实现

答案 1 :(得分:-1)

您需要在代码中实现ACK / NACK通知。