`

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丢包的风险等

分享到:
评论
8 楼 yun9157 2015-07-29  
楼主在么? 能否留一个联系方式,我现在需要做消息回执这一块。需要向你讨教一下
7 楼 shendixiong 2015-07-10  
efei 写道
不知楼主用openfire的时候是否存在丢包的问题,就是由于手机客户端网络异常断线等非正常掉线,这个时候发的消息就丢了,不知道有什么好的解决方法?谢谢。

已解决了!
1.手机客户端可以通过ping的形式来保持服务器的连接
2.通过插件的形式,监控消息发送.发送形式时,如果用户在线,保存一条离线消息,只有等用户接收到信息后才删除离线消息(你可以查看openfire回执)
3.在用户待机后,重新打开openfire,提供一个接口给手机客服端,用于判断该用户是否正常登录
6 楼 shendixiong 2015-07-10  
jxufecs2008 写道
楼主,你好,这个消息回执请求和响应怎么添加到openfire中?以插件的形式吗?


是的!通过插件的形式
5 楼 jxufecs2008 2015-06-05  
楼主,你好,这个消息回执请求和响应怎么添加到openfire中?以插件的形式吗?
4 楼 shendixiong 2014-07-10  
efei 写道
shendixiong 写道
efei 写道
不知楼主用openfire的时候是否存在丢包的问题,就是由于手机客户端网络异常断线等非正常掉线,这个时候发的消息就丢了,不知道有什么好的解决方法?谢谢。


    您好,会出现丢包的情况!
      (1).就是手机终端长时间搁置不动,会百分百出现。这种情况可以通过ping来解决!(这种情况,出现概率很高)
      (2).可以在openfire管理界面中的(Client Connections )设置会话超时时间
      (3).就是改源码


多谢多谢,目前我们采用的方法比较土,是拦截所有的消息,通过判断是否有回执来确定消息是否发送成功,没有发送成功的消息,采用离线消息处理,简单测试了下,目前能解决问题,不知道用户量上来后是否会带来其他问题,等后续再测试看看。


  这种方式是可行的,也不用改动它的源码!我解决的方法跟你类似
3 楼 efei 2014-05-13  
shendixiong 写道
efei 写道
不知楼主用openfire的时候是否存在丢包的问题,就是由于手机客户端网络异常断线等非正常掉线,这个时候发的消息就丢了,不知道有什么好的解决方法?谢谢。


    您好,会出现丢包的情况!
      (1).就是手机终端长时间搁置不动,会百分百出现。这种情况可以通过ping来解决!(这种情况,出现概率很高)
      (2).可以在openfire管理界面中的(Client Connections )设置会话超时时间
      (3).就是改源码


多谢多谢,目前我们采用的方法比较土,是拦截所有的消息,通过判断是否有回执来确定消息是否发送成功,没有发送成功的消息,采用离线消息处理,简单测试了下,目前能解决问题,不知道用户量上来后是否会带来其他问题,等后续再测试看看。
2 楼 shendixiong 2014-05-09  
efei 写道
不知楼主用openfire的时候是否存在丢包的问题,就是由于手机客户端网络异常断线等非正常掉线,这个时候发的消息就丢了,不知道有什么好的解决方法?谢谢。


    您好,会出现丢包的情况!
      (1).就是手机终端长时间搁置不动,会百分百出现。这种情况可以通过ping来解决!(这种情况,出现概率很高)
      (2).可以在openfire管理界面中的(Client Connections )设置会话超时时间
      (3).就是改源码
1 楼 efei 2014-05-06  
不知楼主用openfire的时候是否存在丢包的问题,就是由于手机客户端网络异常断线等非正常掉线,这个时候发的消息就丢了,不知道有什么好的解决方法?谢谢。

相关推荐

    openfire消息回执插件

    《Openfire消息回执插件解析》 Openfire是一款开源的即时通讯服务器,它基于...这三者共同协作,实现了Openfire中的消息回执功能,使得用户可以确认他们的消息是否已被对方接收和阅读,从而提升沟通的效率和信任度。

    openfire服务端实现

    - 设置环境变量,例如添加 `JAVA_HOME` 和 `OPENFIRE_HOME`,并将 Openfire 的启动脚本添加到系统路径。 - 启动 Openfire 服务,通常通过执行 `${OPENFIRE_HOME}/bin/startup.sh`。 - 访问 Openfire 的Web管理...

    openfire聊天服务端源码

    描述中指出,这个项目已经扩展了Openfire的服务端代码,添加了图片、语音和视频发送功能,以及创建群组和发表签名的能力。这些增强使得Openfire不仅仅是一个基础的文本聊天服务器,而是成为一个功能丰富的通信平台。...

    Android 基于xmpp协议,smack包,openfire服务端的高仿QQ的即时通讯实现.

    Android 基于xmpp协议,smack包,openfire服务端的高仿QQ的即时通讯实现。实现了注册,登录,读取好友列表,搜索好友,添加分组,添加好友,删除好友,修改心情,两个客户端之间的信息发送与接收,监听发送来的好友...

    Android 基于xmpp协议,smack包,openfire服务端的高仿QQ的即时通讯实现.zip

    综上所述,这个项目涉及到的技术栈包括XMPP协议、Smack库的使用、Openfire服务器的部署和配置,以及Android应用开发中的UI设计、安全性和性能优化。通过这些技术的结合,可以构建出一个功能完善的即时通讯应用,为...

    openfire防止消息丢失插件

    openfire防止消息丢失插件,防止丢包插件

    openfire消息、监听、启动流程分析

    在Openfire中,消息、监听和启动流程是其核心功能,理解这些流程对于管理和维护Openfire服务器至关重要。 **Openfire消息流程**: Openfire的消息传递主要通过XML stanza(元素)进行,包括IQ、MESSAGE和PRESENCE三...

    openfire处理消息流程及openfire详细信息

    ### Openfire消息处理流程与详细信息解析 #### XMPP协议概览 XMPP,全称Extensible Messaging and Presence Protocol,是一种基于XML的即时通讯协议。它不仅用于消息发送与接收,还支持状态更新和在线状态通知,即...

    XMPP协议之消息回执解决方案.docx

    5. **接收者接收消息并发回执给服务端**:接收者接收到消息后,向服务端发送回执确认消息已被接收。 6. **服务端接收回执并删除记录**:服务端接收到接收者的回执后,确认消息已被成功接收,此时可以删除相关记录。 ...

    openfire消息机制和源码分析

    标题中提到的“Openfire消息机制和源码分析”指的是对开源即时通讯服务器Openfire内部消息处理机制的详细探讨和源代码的解读。Openfire是一个基于XMPP(Extensible Messaging and Presence Protocol)协议的服务器端...

    openfire防消息丢失插件

    openfire服务器在进行消息转发时,如果接收者网络断开,服务器检测不到接收者已下线,转发后消息会丢失,为解决消息丢失,有四种解决方案: 1.发送之前“发送心跳” 2.发送之前“发自定义结构” 3.客服端收到消息...

    openfire_4_6_4_bundledJRE.exe

    openfire服务端自带jre

    openfire消息记录存储插件

    在Openfire中,消息记录存储插件扮演着关键角色,它负责收集、存储以及检索用户的聊天记录,这对于企业级通信管理和合规性审计至关重要。 首先,我们要了解Openfire的消息记录功能。Openfire内置了消息记录管理,但...

    Openfire即时消息传输平台 v4.8.0 源码包.zip

    Openfire v4.8.0是该平台的一个版本,提供了丰富的功能和改进,旨在为企业或个人提供安全、可扩展的即时消息解决方案。 Openfire的核心特性包括: 1. **XMPP支持**:Openfire作为XMPP服务器,实现了XMPP标准,使得...

    openfire-4-6-4.exe

    openfire服务端

    openfire+asmock实现android消息推送

    【标题】"openfire+asmock实现android消息推送"揭示了如何在Android平台上利用Openfire服务器和Mocking框架AsMock来构建一个实时的消息推送系统。Openfire是一款开源的即时通讯服务器,它基于XMPP(Extensible ...

    openfire即时消息处理

    总的来说,Openfire的即时消息处理系统利用XMPP协议的灵活性和开放性,结合Apache MINA的高效网络处理能力,为开发者提供了构建高度可定制和可扩展的即时通讯解决方案。无论是企业内部通讯,还是游戏中的实时交互,...

    openfire处理消息流程,及openfire详细信息.docx

    总的来说,Openfire 的消息处理流程涉及用户连接、身份验证、消息的发送和接收、服务器的路由与存储,以及通过 Smack 和 Spark 进行客户端交互。Apache MINA 提供了高效的网络通信基础,而插件机制则赋予了 Openfire...

    openfire的相关资源

    在"Openfire服务端源代码开发配置指南 micmiu - 软件开发+生活点滴.htm"这篇文档中,详细介绍了如何安装Openfire,包括数据库的设置、管理员账号创建和服务器的启动。 二、源码开发与配置 如果你计划对Openfire进行...

    openfire添加好友

    Openfire 是一个开源的即时通讯服务器,它基于XMPP协议,提供实时通信和协作功能。在Openfire中,用户可以通过添加好友来建立联系人列表,从而...同时,确保正确处理各种状态和响应,以保证通信的稳定性和用户体验。

Global site tag (gtag.js) - Google Analytics