openfire 服務端訊息回執添加和響應

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

相關文章
相關標籤/搜索