2015年11月12日 星期四

[iOS XMPP] 關於XMPP Framework的大小事 - xmpp core 簡介

最近又要開始寫chat application。其中我們要用來做聊天的protocol是:XMPP。因此簡單地把最近一些我對XMPP Framework的了解寫下來,希望這些筆記能帶給大家之後再開發過程更加清楚也更有方向。

XMPP全名是Extensible Messaging and Presence Protocol,他是一個protocol,他的用途並不局限於chat而已,還有很多其他的應用層面,不過我們這裡依舊專注於討論與chat有關的事情。

這裡所討論的是XMPP framework,這個framework是以objective-c為語言,主要分成兩個部分:xmpp core 跟 xmpp extension。xmpp core是核心的部分,主要在實現xmpp的SPEC (RFC 3920)。除了core之外,很多其他的開發者會有各自的需求,因此這些開發者就開始撰寫一些extension,讓xmpp能有更多客製化的功能,例如:自動重新連線、聯絡人、使用者狀態等等,這些xmpp extension可以在官方文件裡找到,通常都已XEP開頭,詳情參閱這裡

在xmpp core裡面,主要包含了這些:


  • XMPPStream
  • XMPPParser
  • XMPPJID
  • XMPPElement
  • XMPPIQ
  • XMPPMessage
  • XMPPPresence
  • XMPPModule
  • XMPPLogging
  • XMPPInternal
以下逐一簡單介紹一下。

XMPPStream 是這個framework的核心,之後是我們最主要進行互動的一個class,而這個class也是所有extension和客製化程式碼的主要接口。他提供很多功能讓framework更具彈性、延展性並讓其他開發者容易開發。


XMPPParser就是...Parser...反正他...就是parser...我們也不太會跟這個class接觸就是了


XMPPJID這個主要是在實作JID(Jabber Identifier),什麼是JID呢?每個user都會有他獨立的JID,可以簡單假想成一種在XMPP中的個人ID嘍。他與NSCopying protocol一致,所以我們可以把JID用做是NSDictionary裡的key。


XMPPElement是三個主要的XMPP元素中的base class: XMPPIQ, XMPPMessage, XMPPPresense。這個class是NSXMLElement的延伸,所以我們可以透過這個去看到任何的xml元素。在XMPP中的傳輸資訊也都是使用XML在傳輸。此外,在framework裡有一個 NSXMLElement+XMPP category,讓我們的程式碼可以更簡單易讀。


XMPPModule主要是提供一個class可以選擇性地去加入一些extensions。這裡比較重要的是:如果你是一個想要開發標準的XEP,或是你希望你自己寫的extension是可以pluggable,那你就必須要架構在XMPPModule之上了。


XMPPLogging提供一個良好的log framework,讓你可以輕鬆把一些app的狀態記錄下來。


XMPPInternal就是一些比較內部的東西,在開發上接觸的機會很低,就不花時間研究了。


介紹完xmpp core中的這些class,下一篇就可以來看看如何設定XMPPStream嘍!

參考連結:https://github.com/robbiehanson/XMPPFramework/wiki/IntroToFramework

沒有留言:

張貼留言