日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

iOS XMPP Framework 中文概述

發布時間:2023/12/19 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 iOS XMPP Framework 中文概述 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本篇文章翻譯XMPP Framework中的Overview of the XMPP Framework部分


介紹

The framework is divided into 2 parts:
1. xmpp核心部分
2. xmpp擴展(roster,XEP's,可選的支持工具等)

xmpp核心部分實現了xmpp規范(RFC 3920)

請不要把聊天與xmpp混淆,xmpp全稱是”可擴展消息與存在協議”,它是一種可以用于多種用途的通用協議,事實上目前有很多公司使用這個框架例如家庭自動化,在醫院傳達警報給護士。

可擴展包括例如支持花名冊,自動重連與多種xmpp擴展實現(XEP's).。

XMPP核心

XMPP核心文件在本地命名為”Core”的文件夾中。這些文件包括:

  • XMPPStream
  • XMPPParser
  • XMPPJID
  • XMPPElement
  • XMPPIQ
  • XMPPMessage
  • XMPPPresence
  • XMPPModule
  • XMPPLogging
  • XMPPInternal

這個框架的核心是XMPPStream類,這是你將要交互使用的主要的類,它是所有的擴展與定義代碼插入的類,它具有一些使框架靈活,可擴展,易于在上面開發有趣的功能。這些將在稍后的文檔中更深入的討論。

XMPPParser 是XMPPStream使用的內部類。你也許已經猜出它是做什么的了,你不需要以任何方式形式與這個解析器交互。

XMPPJID 提供了一個不變的JID (Jabber Identifier)實現,它支持解析JID's,并以各種形式提取JID的各個部分。它遵守NSCopying協議,一邊JID's可以當做NSDictionary的key。它也遵守NSCoding協議。

XMPPElement 是3個主要XMPP元素的基類:XMPPIQ, XMPPMessage & XMPPPresence. XMPPElement擴展NSXMLElement類,因此你有全部的NSXML的功能,檢查任何xml元素。在這個章節有更多詳細的描述Elements: IQ, Message, & Presence。

XMPPModule 提供可選植入擴展的基礎類,如果你正在寫你自己應用執行的代碼。你很可能僅僅創建你自己的類,注冊接受代理調用。但是如果你正在實現一個標準的XEP。或者你想你的應用指定擴展是可被植入,那么你要在XMPPModule上創建,Module在后面更詳細的被介紹。

XMPPLogging 提供一個非常快,強大靈活的日志框架,它會在XMPP Logging 章節中討論。

XMPPInternal 僅僅是關于核心和各種高級底層擴展內部的東西。

元素: IQ, Message, & Presence

XMPPElement擴展NSXMLElement類,因此你有全部的NSXML的功能,檢查任何xml元素。

  • XMPPIQ -> XMPPElement -> NSXMLElement -> NSXMLNode -> NSObject
  • XMPPMessage -> XMPPElement -> NSXMLElement -> NSXMLNode -> NSObject
  • XMPPPresence -> XMPPElement -> NSXMLElement -> NSXMLNode -> NSObject

除了NSXML基礎功能外,還提供了NSXMLElement+XMPP 類別。這個類別提供各種方便的方法讓你的代碼更簡潔易讀。例如:

[element attributeIntValueForName:@"age"];

更多的信息請看Working With Elements頁面

XMPPStream配置

一個xmpp stream配置初始化被分為多個部分:

  • 配置如何連接到xmpp服務器
  • 添加代理
  • 添加 modules
  • 連接
  • 認證

配置連接

對于大部分人來說,這僅涉及一個步驟 - 設置stream的myJID屬性。例如:

xmppStream.myJID = [XMPPJID jidWithString:@"user@gmail.com"];

該xmpp stream 將查找遵循XMPP RFC的剩余信息,這包括正在進行的SRV查找_xmpp-client._tcp.domain。在上面的例子中,使用Gmail,谷歌服務器可能會返回類似"talk.google.com",然后xmpp stream將會鏈接到該服務器,如果SRV查找查找失敗,那么xmpp stream 將會簡單鏈接到JID's domain。

如果你知道你正在連接到不具有xmpp SRV記錄的xmpp服務器,你可以告訴xmpp stream 通過指定的主機名跳過SRV查找,例如:

xmppStream.myJID = [XMPPJID jidWithString:@"user@myCompany.com"]; xmppStream.hostName = @"myCompany.com";

主機名也會派上用場,當你使用一個開發xmpp服務器,可能服務器是在背地網絡可用的,或者不具有DNS地址等,例如:

xmppStream.myJID = [XMPPJID jidWithString:@"user@dev1.myCompany.com"]; xmppStream.hostName = @"192.168.2.27";

另一個可選的屬性是主機端口,默認情況下,并按照xmpp規范。幾乎所有的服務器上的端口都在5222運行,如果你的服務器在不同的端口上運行,那可以設置主機端口的屬性。

添加代理

XMPPStream有一些旨在使框架靈活,可擴展,易于在上面開發有趣的功能。其中之一使用MulticastDelegate。

什么是MulticastDelegate?

xmpp framework需要支持擴展的數量不受限制,這包括對這個框架的官方擴展,以及任何數量的擴展或你想要插入這個框架的自定義代碼。因此傳統的代理模式是行不通的,xmpp 模塊和擴展需要分開到自己單獨的類,但每個類都需要接受代理方法。而標準NSNotification架構將無法勝任,一些代理要求返回變量。(加上它真的很煩人要從userInfo字典的通知中提取參數)。

因此一個MulticastDelegate允許你使用一個標準的代理模式插入框架中,但它允許多個類接受想用的代理通知。這樣做的好處是,你不必把所有的xmpp處理代碼在一個類中。你可以認為你合適的方法分開處理在不同的類中。

你可以任何時間添加/刪除XMPPStream的代理對象:

[xmppStream addDelegate:self delegateQueue:dispatch_get_main_queue()]; ... [xmppStream removeDelegate:self];

更多關于MulticastDelegate的討論可以在這里找到。線程和隊列更詳細的討論可以在這里找到。

添加 Modules

這有一些關于這個框架的擴展,當然,你可以如你所愿寫盡可能多的擴展。我們不會檢查所有可用的擴展,但我們會列出幾個在這里示例。

  • XMPPReconnect - 自動重新連接,如果你意外斷開。
  • XMPPRoster - 提供標準的xmpp花名冊支持
  • XMPPRoom - 提供多人聊天支持.
  • XMPPPubSub - 發布訂閱

作為例子,我們將會插入XMPPReconnect模塊在我們的stream:

xmppReconnect = [ [XMPPReconnect alloc] init];// Optional configuration of xmppReconnect could go here. // The defaults are fine for our purposes.[xmppReconnect activate:xmppStream];// You can also optionally add delegates to the module.[xmppReconnect addDelegate:self delegateQueue:dispatch_get_main_queue()];// And that's all that is needed. // The module will receive any delegate methods it needs automatically // from the xmpp stream, and will continue to do its thing unless you deactivate it.

連接

當你準備好,你可以開始連接進程:

NSError *error = nil; if (![xmppStream connect:&error]) {NSLog(@"Oops, I probably forgot something: %@", error); }

如果你忘記設置必需的屬性,例如myJID,那么connect方法會返回NO,錯誤消息會通知你的問題。

在連接過程中,客戶端和服務器經過一個xmpp握手。在此期間,服務器通知各種它支持以及需要的各種協議給客戶端。有些服務器可能需要連接通過SSL/TLS。如果是這樣的情況下,xmpp stream將自動保護連接,如果你正在連接服務器以不正確X509證書,你可能需要實現xmppStream:willSecureWithSettings: 代理方法來改變默認的安全設置。

認證

所有的連接握手結束后xmppStreamDidConnect: 代理方法被調用。這通常是大多數客戶端應啟動驗證過程:

- (void)xmppStreamDidConnect:(XMPPStream *)sender {[xmppStream authenticateWithPassword:password error:NULL]; }

XMPP 日志

這有幾個目標對于整個XMPP架構日志:

  • 它必須支持多種日志級別.

    不是所有的日志消息具有相同的優先級。有些是有關錯誤的,而其他都只是信息。日志分級幫助開發者保證他們的日志信息完整的,能夠打開和關閉他們沒有任何困難。

  • 它必須在每個文件基礎上可配置

    一個全局日志級別不會接受當這個框架包含了這么多文件。加上調試的問題往往開發者只希望看到幾個文件的日志語句。

  • 它必須可配置于終端用戶

    xmpp framework 需要對日志語句完全控制,用戶有很多不同的需求。一些想要日志聲明到一個文件中,一些可能想要日志聲明到數據庫里。或者可能他們需要針對日志聲明在不同的地方,取決于日志聲明來源于app中還是xmpp framework。

我從事客戶端多年來的工作,我看到第三方框架一遍又一遍發生同樣的問題。第三方庫自帶散落著的NSLog語句,最終需要用戶通過庫注釋掉NSLog語句,或者將它們轉換為一些原始的自定義宏的版本。

xmpp framework 采用了專業的日志框架CocoaLumberjack。這個日志框架實際上比的NSLog更快,做同樣的事情時也是如此。此外,它還支持大量不同的配置,并允許終端用戶甚至可以添加自己的自定義日志記錄,篩選和格式化。

下面是你需要知道的XMPPFramework有關日志的設置:

對于在框架內部大多數文件頂部你會發現如下:

// Log levels: off, error, warn, info, verbose static const int xmppLogLevel = XMPP_LOG_LEVEL_WARN;

如你所見有4個日志級別(加上 XMPP_LOG_LEVEL_NONE):

  • Error
  • Warning
  • Info
  • Verbose

您可以更改任何文件的日志級別,要它輸出更多的信息。

除了這一點,可啟用一個跟蹤標記。當啟用跟蹤,它輸出正在調用的方法。

請注意,跟蹤是從日志等級分開的。例如,一個可以設置日志級別設置為警告,并啟用跟蹤像這樣:

// Log levels: off, error, warn, info, verbose static const int xmppLogLevel = XMPP_LOG_LEVEL_WARN | XMPP_LOG_FLAG_TRACE;

就代碼而言意味著:

XMPPLogTrace(); // Enabled - Will spit out "<FileName>: <MethodName>" XMPPLogError(@"I will get logged"); XMPPLogWarn(@"I will get logged"); XMPPLogInfo(@"I will NOT get logged"); XMPPLogVerbose(@"I will NOT get logged");

除此之外,XMPPStream有一個選項使你能夠看到正在發送的原始XML sent/received。你可以把它放在XMPPStream.m像這樣:

// Log levels: off, error, warn, info, verbose static const int xmppLogLevel = XMPP_LOG_LEVEL_INFO | XMPP_LOG_FLAG_SEND_RECV;

當你啟動應用程序,您需要配置lumberjack框架。對于初學者來說,你可以這樣簡單的設置在你的AppDelegate:

#import "DDLog.h" #import "DDTTYLogger.h"- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {[DDLog addLogger:[DDTTYLogger sharedInstance] withLogLevel:XMPP_LOG_FLAG_SEND_RECV];// All your other code... }

更多關于Lumberjack信息參考這里。
For more information about Lumberjack take a look at its project page.

更多信息

想要立刻開始?

  • Get started using XMPPFramework on iOS
  • Get started using XMPPFramework on Mac OS X

擴展你的知識!

  • Learn about working with xml/xmpp elements

  • Learn about XMPPFramework's threading architecture

轉載于:https://www.cnblogs.com/itrena/p/5927096.html

總結

以上是生活随笔為你收集整理的iOS XMPP Framework 中文概述的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。