xmpp协议框架包介绍:org.xmpp.packet.Packet+JID+PacketInterceptor+Session
生活随笔
收集整理的這篇文章主要介紹了
xmpp协议框架包介绍:org.xmpp.packet.Packet+JID+PacketInterceptor+Session
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
【1】org.xmpp.packet.Packet(數(shù)據(jù)包):
1)intro: 一個(gè) XMPP數(shù)據(jù)包(也被稱為 數(shù)據(jù)節(jié))。每個(gè)數(shù)據(jù)包由 dom4j 元素來支持。有一系列易于操作元素(Element)的便捷方法,也可以直接訪問和操作元素(Element);
2)有3個(gè)核心的數(shù)據(jù)包類型:
type1)org.xmpp.packet.Message(public class Message extends Packet):用于在用戶間發(fā)送數(shù)據(jù);Message 類型的數(shù)據(jù)包有多種類型:
type1.1)normal:email中使用的普通文本; type1.2)chat:聊天中使用的傳統(tǒng)簡短文本消息 type1.3)groupchat:發(fā)送給 群組聊天的聊天消息; type1.4)headline:滾動字幕演示的 文本消息; type1.5)error:表明消息錯(cuò)誤;
type2)org.xmpp.packet.Presence(public class Presence extends Packet):包含用戶在線消息 或 被用于管理 在線狀態(tài)訂閱; intro: Presence 數(shù)據(jù)包(在線數(shù)據(jù)包),該數(shù)據(jù)包用于表達(dá) 一個(gè)實(shí)體的當(dāng)前網(wǎng)絡(luò)可用性 和 通知其他實(shí)體 某 實(shí)體的網(wǎng)絡(luò)可用性; Presence 數(shù)據(jù)包也被用于 協(xié)商和管理 其他實(shí)體對 某實(shí)體網(wǎng)絡(luò)可用性的訂閱情況;
type2.0)available: type == null 表示 實(shí)體網(wǎng)絡(luò)可用性可用;(非離線狀態(tài)) type2.1)unvailable:通常由聊天接口使用的 短文本消息; type2.2)subscribe:發(fā)送方希望訂閱接收方的網(wǎng)絡(luò)可用性; type2.3)subsribed:發(fā)送方允許 接收方發(fā)送接收 發(fā)送方的網(wǎng)絡(luò)可用性; type2.4)unsubscribe:發(fā)送方?jīng)]有訂閱接收方的網(wǎng)絡(luò)可用性; type2.5)unsubscribed: 網(wǎng)絡(luò)可用性訂閱請求被拒絕 或 曾經(jīng)授權(quán)的訂閱 也被刪除; type2.6)probe: 請求 某實(shí)體的當(dāng)前網(wǎng)絡(luò)可用性,只應(yīng)該在代表用戶的服務(wù)器上 產(chǎn)生; type2.7)error:當(dāng)處理或 傳遞以前發(fā)送的 網(wǎng)絡(luò)可用性 數(shù)據(jù)節(jié) 的時(shí)候,會發(fā)生錯(cuò)誤; type2.8)Presence.Show(內(nèi)部枚舉類): show 值是默認(rèn)的,表明實(shí)體的網(wǎng)絡(luò)可用性是 true。可用值如下: value1)chat:實(shí)體或資源正在線聊天; value2)away:實(shí)體或資源暫時(shí)離開; value3)xe:實(shí)體或資源離開較長時(shí)間(離開較長時(shí)間); value4)dnd:實(shí)體或資源 忙碌,請不要打擾;
type3)org.xmpp.packet.IQ(public class IQ extends Packet):交換信息 和 使用 request/response 協(xié)議執(zhí)行查詢操作; intro to IQ數(shù)據(jù)包: IQ(消息/查詢)數(shù)據(jù)包。使用 IQ 數(shù)據(jù)包 在服務(wù)器上 獲取和設(shè)置消息, 包括?驗(yàn)證消息,花名冊操作,創(chuàng)建用戶。每個(gè) IQ 數(shù)據(jù)包 有一個(gè)特定類型來表明 將會執(zhí)行哪種類型的動作: get, set, result, 還是 error;其中 客戶端請求(request)==[set or get], 而服務(wù)器響應(yīng)(response)== [result or error]
type3.1) get:該 IQ 數(shù)據(jù)包是一個(gè)信息請求; type3.2) set:該 IQ 數(shù)據(jù)包 提供所需數(shù)據(jù),設(shè)置新值 或 替換已存在的 值; type3.3) result:該 IQ 數(shù)據(jù)包 作為 get 或 set 請求 執(zhí)行成功的響應(yīng); type3.4) error:當(dāng) 處理 和 傳遞 以前發(fā)送的 get 或 set 請求的時(shí)候,會發(fā)生錯(cuò)誤;
【2】JID(public class JID implements Comparable<JID>, Serializable {) 1)intro: JID 作為 XMPP 地址,由node,domain,resource 構(gòu)成;domain是必須元素,而 node 和 resource 是可選的;jid = [ node "@" ] domain [ "/" resource ] 2)看個(gè)荔枝: user@example.com user@example.com/home example.com 3)JID 的每個(gè)構(gòu)成部分最大長度為 1023,所以3個(gè)部分加起來最大是 ?3071 字節(jié), 因?yàn)檫€有 @ 和 / 兩個(gè)字符; 4)JID 實(shí)例是不變的(線程安全的),多個(gè)線程可作用于該數(shù)據(jù)而不用考慮其他線程會改變其數(shù)據(jù);
【3】PacketInterceptor(數(shù)據(jù)包攔截器)public interface PacketInterceptor 1)intro:一個(gè)數(shù)據(jù)包攔截器 封裝了一個(gè)動作,在 數(shù)據(jù)包被SocketReader 接收之前或之后 和 當(dāng)數(shù)據(jù)包在 SocketConnection 被發(fā)送的時(shí)候,該動作會基于該數(shù)據(jù)包被觸發(fā); 2)動作類型分為兩大類: type1)通過拋出異常拒絕數(shù)據(jù)包的攔截器(只有當(dāng)數(shù)據(jù)包沒有被處理的情況) type2)動態(tài)轉(zhuǎn)換數(shù)據(jù)包內(nèi)容的攔截器; 3)可以在運(yùn)行時(shí)安裝或移除任何數(shù)量的攔截器。可以進(jìn)行全局安裝或針對每個(gè)用戶安裝。全局?jǐn)r截器會首先運(yùn)行,接著會依username 安裝攔截器; 4)對某個(gè)數(shù)據(jù)包觸發(fā)攔截器。該攔截器要么修改數(shù)據(jù)包,要么拋出異常PacketRejectedException 以 阻塞它 不讓其發(fā)送或被處理; 5)只有 當(dāng) ?processed 為 false的時(shí)候,才可以拋出異常,這意味著 讀取的數(shù)據(jù)包還沒有被處理 或 數(shù)據(jù)包還沒有被發(fā)送。如果異常拋出信息為 閱讀數(shù)據(jù)包,則 數(shù)據(jù)包發(fā)送者接受到一個(gè)錯(cuò)誤的響應(yīng)。 如果 異常拋出信息為接收數(shù)據(jù)包,則一切正常;
Attention)注意到: 對于每個(gè)數(shù)據(jù)包,每一個(gè)攔截器都要被調(diào)用兩次:一次在 處理完成之前,一次在 處理完成之后。? void interceptPacket(Packet packet, Session session, boolean incoming, boolean processed) throws PacketRejectedException; 【4】Session(org.jivesoftware.openfire.session.Session)?public interface Session extends RoutableChannelHandler 1)intro: session 代表 服務(wù)器 和 客戶端的一個(gè)連接(c2s) 或是 服務(wù)器和服務(wù)器間的連接(s2s)以及 服務(wù)器和 一個(gè) 組件的連接。 c2s 連接 與 驗(yàn)證和用戶賬號相關(guān)聯(lián),而 s2s 連接 有 可選驗(yàn)證關(guān)聯(lián) 但沒有與用戶的關(guān)聯(lián)。 2)從 session 獲取對象管理器 以 訪問 服務(wù)器資源; method1)public JID getAddress(): 返回?cái)?shù)據(jù)包處理器的地址。——獲取用戶地址。類似核心服務(wù)器數(shù)據(jù)包路由器的服務(wù)會使用 該地址 決定 是否一個(gè)數(shù)據(jù)包應(yīng)該被發(fā)送給處理器。服務(wù)器所代表的處理器 應(yīng)該使用 泛型 服務(wù)器主機(jī)地址(如 server.com)
【2】JID(public class JID implements Comparable<JID>, Serializable {) 1)intro: JID 作為 XMPP 地址,由node,domain,resource 構(gòu)成;domain是必須元素,而 node 和 resource 是可選的;jid = [ node "@" ] domain [ "/" resource ] 2)看個(gè)荔枝: user@example.com user@example.com/home example.com 3)JID 的每個(gè)構(gòu)成部分最大長度為 1023,所以3個(gè)部分加起來最大是 ?3071 字節(jié), 因?yàn)檫€有 @ 和 / 兩個(gè)字符; 4)JID 實(shí)例是不變的(線程安全的),多個(gè)線程可作用于該數(shù)據(jù)而不用考慮其他線程會改變其數(shù)據(jù);
【3】PacketInterceptor(數(shù)據(jù)包攔截器)public interface PacketInterceptor 1)intro:一個(gè)數(shù)據(jù)包攔截器 封裝了一個(gè)動作,在 數(shù)據(jù)包被SocketReader 接收之前或之后 和 當(dāng)數(shù)據(jù)包在 SocketConnection 被發(fā)送的時(shí)候,該動作會基于該數(shù)據(jù)包被觸發(fā); 2)動作類型分為兩大類: type1)通過拋出異常拒絕數(shù)據(jù)包的攔截器(只有當(dāng)數(shù)據(jù)包沒有被處理的情況) type2)動態(tài)轉(zhuǎn)換數(shù)據(jù)包內(nèi)容的攔截器; 3)可以在運(yùn)行時(shí)安裝或移除任何數(shù)量的攔截器。可以進(jìn)行全局安裝或針對每個(gè)用戶安裝。全局?jǐn)r截器會首先運(yùn)行,接著會依username 安裝攔截器; 4)對某個(gè)數(shù)據(jù)包觸發(fā)攔截器。該攔截器要么修改數(shù)據(jù)包,要么拋出異常PacketRejectedException 以 阻塞它 不讓其發(fā)送或被處理; 5)只有 當(dāng) ?processed 為 false的時(shí)候,才可以拋出異常,這意味著 讀取的數(shù)據(jù)包還沒有被處理 或 數(shù)據(jù)包還沒有被發(fā)送。如果異常拋出信息為 閱讀數(shù)據(jù)包,則 數(shù)據(jù)包發(fā)送者接受到一個(gè)錯(cuò)誤的響應(yīng)。 如果 異常拋出信息為接收數(shù)據(jù)包,則一切正常;
Attention)注意到: 對于每個(gè)數(shù)據(jù)包,每一個(gè)攔截器都要被調(diào)用兩次:一次在 處理完成之前,一次在 處理完成之后。? void interceptPacket(Packet packet, Session session, boolean incoming, boolean processed) throws PacketRejectedException; 【4】Session(org.jivesoftware.openfire.session.Session)?public interface Session extends RoutableChannelHandler 1)intro: session 代表 服務(wù)器 和 客戶端的一個(gè)連接(c2s) 或是 服務(wù)器和服務(wù)器間的連接(s2s)以及 服務(wù)器和 一個(gè) 組件的連接。 c2s 連接 與 驗(yàn)證和用戶賬號相關(guān)聯(lián),而 s2s 連接 有 可選驗(yàn)證關(guān)聯(lián) 但沒有與用戶的關(guān)聯(lián)。 2)從 session 獲取對象管理器 以 訪問 服務(wù)器資源; method1)public JID getAddress(): 返回?cái)?shù)據(jù)包處理器的地址。——獲取用戶地址。類似核心服務(wù)器數(shù)據(jù)包路由器的服務(wù)會使用 該地址 決定 是否一個(gè)數(shù)據(jù)包應(yīng)該被發(fā)送給處理器。服務(wù)器所代表的處理器 應(yīng)該使用 泛型 服務(wù)器主機(jī)地址(如 server.com)
總結(jié)
以上是生活随笔為你收集整理的xmpp协议框架包介绍:org.xmpp.packet.Packet+JID+PacketInterceptor+Session的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何在家免费制作好看的证件照如何在家免费
- 下一篇: 习以为常的电脑键盘