openfire 服務端消息回執添加和響應
服務器
openfire自己有不少比較好的實現框架,如asmack和smack。具體的你們能夠上網搜索。由於openfire自己對長鏈接的支持不是很好,並且相對來講,長鏈接也挺消耗資源的,可是,又要必須作到及時響應。框架
這就存在了一些特殊的帳戶要存在在服務器中。這些帳戶能實現自動添加好友,自動響應消息和消息回執響應,而消息回執的響應和請求在smack端有很好的封裝,而我服務端也按照其xml請求和響應,以下:code
PacketExtension packetExtension2 = new PacketExtension(DeliveryReceipt.ELEMENT,DeliveryReceipt.NAMESPACE); // 將消息id返回給發送信息用戶 代表已經接收到 packetExtension2.getElement().addAttribute("id", message.getID()); // 回執請求設置 responseMessage.addExtension(packetExtension2); XMPPServer.getInstance().getRoutingTable().routePacket(message.getFrom(), responseMessage, true);
而消息回執的響應相對來講複雜一點,以下:xml
private static Message packMessageProperty(Message requestMessage , Map<String, String> propertyValue){ String key = null; String value = null; for (Map.Entry<String, String> entry: propertyValue.entrySet()) { key = entry.getKey(); value = entry.getValue(); } Message sendMessage = new Message(); sendMessage.setFrom(requestMessage.getTo()); sendMessage.setTo(requestMessage.getFrom()); sendMessage.setType(org.xmpp.packet.Message.Type.chat); // 封裝property數據 PacketExtension packetExtension = new PacketExtension("properties","http://www.jivesoftware.com/xmlns/xmpp/properties"); Element root = packetExtension.getElement(); Element propertyElement = root.addElement("property"); Element nameElement = propertyElement.addElement("name"); Element valueElement = propertyElement.addElement("value"); nameElement.setText(key); valueElement.addAttribute("type", "string"); valueElement.setText(value); sendMessage.addExtension(packetExtension); return sendMessage; }
設置消息回執主要緣由有如下幾條:ip
1.查看消息是否發送成功,方便再次發送資源
2.統計openfire消息的送達率get
3.彌補openfire丟包的風險等string