Приложение чата с использованием XMPP Server - PullRequest
0 голосов
/ 17 января 2012

Я создаю приложение чата с использованием сервера 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();
}

Ответы [ 2 ]

3 голосов
/ 17 января 2012

Если вы подключены к серверу и отправляете сообщение, вы можете быть достаточно уверены, что сообщение достигло сервера.Если клиент находится в ненадежной сети, иногда TCP-соединения молча разрываются, и прошло некоторое время, прежде чем это было обнаружено, и они закрылись.Возможные решения этой проблемы (в порядке сложности):

  • Пропингуйте сервер через равные промежутки времени, используя XEP-0199 .
  • Реализация XEP-0198.Предельная надежность, но более сложная в реализации и требует поддержки сервера.

Другая проблема, о которой вы, похоже, беспокоитесь, - пользователь 2 видит сообщение.Я не знаю о вашем приложении, как оно настроено или как вы хотите, чтобы оно работало.Однако большинство серверов XMPP автоматически сохраняют сообщения, отправленные пользователю, когда они находятся в автономном режиме.Затем они доставляются пользователю при подключении к сети.См. XEP-0160 для получения дополнительной информации.

Наконец, вы можете использовать квитанции сообщения, чтобы узнать, когда пользователь2 получил / прочитал сообщение.Они описаны в XEP-0184 и, возможно, only , что вам действительно нужно реализовать, если все, что вам нужно, это знать, что user2 получил сообщение.

0 голосов
/ 17 января 2012

вам нужно внедрить уведомление ACK / NACK в ваш код.

...