繁体   English   中英

使用XMPP Server聊天应用程序

[英]Chat application using XMPP Server

我正在使用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();
}

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM