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