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