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丢包的风险等
相关推荐
《Openfire消息回执插件解析》 Openfire是一款开源的即时通讯服务器,它基于...这三者共同协作,实现了Openfire中的消息回执功能,使得用户可以确认他们的消息是否已被对方接收和阅读,从而提升沟通的效率和信任度。
- 设置环境变量,例如添加 `JAVA_HOME` 和 `OPENFIRE_HOME`,并将 Openfire 的启动脚本添加到系统路径。 - 启动 Openfire 服务,通常通过执行 `${OPENFIRE_HOME}/bin/startup.sh`。 - 访问 Openfire 的Web管理...
描述中指出,这个项目已经扩展了Openfire的服务端代码,添加了图片、语音和视频发送功能,以及创建群组和发表签名的能力。这些增强使得Openfire不仅仅是一个基础的文本聊天服务器,而是成为一个功能丰富的通信平台。...
Android 基于xmpp协议,smack包,openfire服务端的高仿QQ的即时通讯实现。实现了注册,登录,读取好友列表,搜索好友,添加分组,添加好友,删除好友,修改心情,两个客户端之间的信息发送与接收,监听发送来的好友...
综上所述,这个项目涉及到的技术栈包括XMPP协议、Smack库的使用、Openfire服务器的部署和配置,以及Android应用开发中的UI设计、安全性和性能优化。通过这些技术的结合,可以构建出一个功能完善的即时通讯应用,为...
openfire防止消息丢失插件,防止丢包插件
在Openfire中,消息、监听和启动流程是其核心功能,理解这些流程对于管理和维护Openfire服务器至关重要。 **Openfire消息流程**: Openfire的消息传递主要通过XML stanza(元素)进行,包括IQ、MESSAGE和PRESENCE三...
### Openfire消息处理流程与详细信息解析 #### XMPP协议概览 XMPP,全称Extensible Messaging and Presence Protocol,是一种基于XML的即时通讯协议。它不仅用于消息发送与接收,还支持状态更新和在线状态通知,即...
5. **接收者接收消息并发回执给服务端**:接收者接收到消息后,向服务端发送回执确认消息已被接收。 6. **服务端接收回执并删除记录**:服务端接收到接收者的回执后,确认消息已被成功接收,此时可以删除相关记录。 ...
标题中提到的“Openfire消息机制和源码分析”指的是对开源即时通讯服务器Openfire内部消息处理机制的详细探讨和源代码的解读。Openfire是一个基于XMPP(Extensible Messaging and Presence Protocol)协议的服务器端...
openfire服务器在进行消息转发时,如果接收者网络断开,服务器检测不到接收者已下线,转发后消息会丢失,为解决消息丢失,有四种解决方案: 1.发送之前“发送心跳” 2.发送之前“发自定义结构” 3.客服端收到消息...
openfire服务端自带jre
在Openfire中,消息记录存储插件扮演着关键角色,它负责收集、存储以及检索用户的聊天记录,这对于企业级通信管理和合规性审计至关重要。 首先,我们要了解Openfire的消息记录功能。Openfire内置了消息记录管理,但...
Openfire v4.8.0是该平台的一个版本,提供了丰富的功能和改进,旨在为企业或个人提供安全、可扩展的即时消息解决方案。 Openfire的核心特性包括: 1. **XMPP支持**:Openfire作为XMPP服务器,实现了XMPP标准,使得...
openfire服务端
【标题】"openfire+asmock实现android消息推送"揭示了如何在Android平台上利用Openfire服务器和Mocking框架AsMock来构建一个实时的消息推送系统。Openfire是一款开源的即时通讯服务器,它基于XMPP(Extensible ...
总的来说,Openfire的即时消息处理系统利用XMPP协议的灵活性和开放性,结合Apache MINA的高效网络处理能力,为开发者提供了构建高度可定制和可扩展的即时通讯解决方案。无论是企业内部通讯,还是游戏中的实时交互,...
总的来说,Openfire 的消息处理流程涉及用户连接、身份验证、消息的发送和接收、服务器的路由与存储,以及通过 Smack 和 Spark 进行客户端交互。Apache MINA 提供了高效的网络通信基础,而插件机制则赋予了 Openfire...
在"Openfire服务端源代码开发配置指南 micmiu - 软件开发+生活点滴.htm"这篇文档中,详细介绍了如何安装Openfire,包括数据库的设置、管理员账号创建和服务器的启动。 二、源码开发与配置 如果你计划对Openfire进行...
Openfire 是一个开源的即时通讯服务器,它基于XMPP协议,提供实时通信和协作功能。在Openfire中,用户可以通过添加好友来建立联系人列表,从而...同时,确保正确处理各种状态和响应,以保证通信的稳定性和用户体验。