Tôi đã xây dựng một ứng dụng trò chuyện bằng cách sử dụng máy chủ Openfire (xmpp). Trò chuyện trực tiếp với một người đang hoạt động tốt và tin nhắn được gửi ngay lập tức. Nhưng khi chúng tôi gửi một tin nhắn trong một nhóm, tin nhắn đầu tiên bị trì hoãn và tin nhắn thứ hai được gửi ngay lập tức.Nhắn tin nhóm bị trì hoãn trong openfire
MultiUserChatManager groupChat =
MultiUserChatManager.getInstanceFor(connection).getMultiUserChat("group_name");
groupChat.send("Message object");
Tại sao thư đầu tiên bị trì hoãn?
MUC Creation là
MultiUserChatManager mchatManager = MultiUserChatManager.getInstanceFor(xmpptcpConnection);
MultiUserChat mchat = mchatManager.getMultiUserChat(group);
if (!mchat.isJoined()) {
Log.d("CONNECT", "Joining room !! " + group + " and username " + username);
boolean createNow = false;
try {
mchat.createOrJoin(username);
createNow = true;
} catch (Exception e) {
Log.d("CONNECT", "Error while creating the room " + group + e.getMessage());
}
if (createNow) {
Form form = mchat.getConfigurationForm();
Form submitForm = form.createAnswerForm();
List<FormField> formFieldList = submitForm.getFields();
for (FormField formField : formFieldList) {
if(!FormField.Type.hidden.equals(formField.getType()) && formField.getVariable() != null) {
submitForm.setDefaultAnswer(formField.getVariable());
}
}
submitForm.setAnswer("muc#roomconfig_persistentroom", true);
submitForm.setAnswer("muc#roomconfig_publicroom", true);
mchat.sendConfigurationForm(submitForm);
//mchat.sendConfigurationForm(
// new Form(DataForm.Type.submit)); //this is to create the room immediately after join.
}
}
Log.d("CONNECT", "Room created!!");
return true;
} catch (SmackException e) {
e.printStackTrace();
} catch (XMPPException.XMPPErrorException e) {
e.printStackTrace();
}
Có thể bạn lưu trữ thư đến trong cơ sở dữ liệu? Nếu có, tôi đoán đó là một vấn đề khác bằng cách tạo cơ sở dữ liệu hơn là một thông báo bị trì hoãn ... – Opiatefuchs
Chỉ xuất hiện thông điệp đầu tiên của nó. Sau khi chúng tôi chuyển đổi nhóm thì điều tương tự xảy ra trong thông báo đầu tiên. –
Nếu đó chỉ là vấn đề cơ sở dữ liệu thì hãy lặp lại những điều tương tự –