XMPP RFC
可扩展消息和状态协议(XMPP)的基本规范正式确定了Jabber开源社区在1999年开发的核心协议。它们由IETF的XMPP工作组制定,并于2004年10月作为RFC 3920和3921发布。
smack : Java开发包
XMPP Clients
Presence
表示XMPP存在数据包(packets)。每个状态节(stanza)都具有一种类型(type),该类型是以下值之一:
- available-(缺省)指示用户可以接收消息。
- unavailable-用户无法接收消息。
- subscribe-请求订阅收件人的存在。
- subscribed-将订阅授予发件人的存在。
- unsubscribe-请求删除对发件人的订阅。
- unsubscribed-取消订阅到发件人的状态。
- error-状态节包含错误消息。
许多属性是可选的:
Status-描述用户在场(即午餐)的自由格式文本。
Priority-发送方资源的非负数字优先级。最高资源优先级是未寻址到特定资源的数据包的默认接收者。
Mode-五个状态模式之一:available (the default), chat, away, xa (extended away), and dnd (do not disturb)。
存在数据包用于两个目的。首先,通知服务器用户的当前状态。其次,它们用于从名册中订阅和取消订阅用户。
IQ
The base IQ (Info/Query) packet.
IQ数据包用于获取和设置服务器上的信息,包括身份验证,名册操作和创建帐户。
每个IQ节都有一个特定的类型,该类型指示要采取的操作类型:“获取”,“设置”,“结果”或“错误”。
IQ数据包可以包含存在于特定XML名称空间中的单个子元素。元素名称和名称空间的组合决定了IQ节的类型。 IQ子数据包片段的一些示例:
<query xmlns="jabber:iq:auth"> -- an authentication IQ.
<query xmlns="jabber:iq:private"> -- a private storage IQ.
<pubsub xmlns="http://jabber.org/protocol/pubsub"> -- a pubsub IQ.
Message:
表示XMPP消息包。消息可以是以下几种类型之一:
- Message.Type.NORMAL – (默认)用于类似电子邮件界面的普通短信。
- Message.Type.CHAT – 在逐行聊天界面中使用的典型的短文本消息。
- Message.Type.GROUP_CHAT – 发送到群聊服务器以进行群聊的聊天消息。
- Message.Type.HEADLINE – 在滚动字幕显示中显示的文本消息。
- Message.Type.ERROR – 指示消息传递错误。
对于每种消息类型,通常如下使用不同的消息字段: