openfire 服务端消息回执添加和响应

      openfire本身有很多比较好的实现框架,如asmack和smack。具体的大家可以上网搜索。因为openfire本身对长连接的支持不是很好,而且相对来说,长连接也挺消耗资源的,但是,又要必须做到及时响应。

   这就存在了一些特殊的账户要存在在服务器中。这些账户能实现自动添加好友,自动响应消息和消息回执响应,而消息回执的响应和请求在smack端有很好的封装,而我服务端也按照其xml请求和响应,如下:

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);

 

而消息回执的响应相对来说复杂一点,如下:

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;
	}

设置消息回执主要原因有以下几条:

 1.查看消息是否发送成功,方便再次发送

 2.统计openfire消息的送达率

 3.弥补openfire丢包的风险等

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值