【问题标题】:Chat application using XMPP Server使用 XMPP 服务器的聊天应用程序
【发布时间】:2012-02-12 03:48:09
【问题描述】:

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

【问题讨论】:

  • 这种方法中的作家是什么?
  • 将数据写入XMPP服务器的xml writer
  • 我当然知道,我想知道的是,它是哪个类的对象/变量?
  • okies,你可以使用 , HttpConnection 。或者只是检查您的 SecureConnection 是否有类似 getResponseCode() 的方法?

标签: blackberry java-me xmpp


【解决方案1】:

如果您已连接到服务器并发送了一条消息,则您可以有理由相信该消息已到达服务器。如果客户端在不可靠的网络上,有时 TCP 连接会静默中断,并且需要一段时间才能检测到并关闭它们。可能的解决方案(按复杂性排序):

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

您似乎担心的另一个问题是 user2 看到该消息。我不了解您的应用程序、它的配置方式或您希望它如何工作。然而,大多数 XMPP 服务器会在用户离线时自动存储发送给用户的消息。然后在用户上线时将其交付给用户。请参阅XEP-0160 了解更多信息。

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

【讨论】:

  • 嘿,MattJ,您所说的所有内容都已实现。我不担心第二个用户。我只想知道我发送的消息何时到达服务器。如何让服务器回复发件人消息已到达?谢谢
  • 如果你说我所说的一切都已经实现,那么你就有了 XEP-0198,它已经为你提供了这些信息。发送消息后发送,服务器收到后会回复。
【解决方案2】:

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

【讨论】:

  • 感谢您的回复,如何在我的代码中实现该 ACK/NACK?我读到这应该在描述中用餐,但如何?顺便说一句,您的意思是客户端代码对吗?
  • 好吧,当您向服务器发送任何消息时,服务器应该响应“1”以防客户端向服务器连续发送消息。所以这个“1”是客户端的ACK。如果客户在特定时间内没有收到“1”,那么您的客户应该重新发送消息
  • 那么服务器没有响应任何东西,这就是我问这个问题的原因。有关更多信息,我正在使用 openfire 服务器,您确定此信息吗?因为我测试了数百次,服务器没有回复
  • 好的,告诉我你是如何向服务器发送代码的?我 100% 确定,无论何时服务器收到消息,它都必须返回代码,至少您必须获得 200 作为响应代码,这是一种适合您的 ACK。
  • 并且没有像 200 这样的响应,因为我们只是使用 writer.flush 方法,即使没有互联网连接,有时甚至不会返回异常
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-01-28
  • 2011-11-06
  • 2014-06-19
  • 2018-06-05
  • 2015-11-05
  • 2014-03-07
  • 2011-01-28
相关资源
最近更新 更多