xmpp+openfire

前言

相信移動端開發(fā)的同學(xué),或多或少都了解或者開發(fā)過及時通訊類或者有及時通訊功能的項目,目前獨立開發(fā)來說比較常用的是基于socket,多數(shù)情況的快速開發(fā)都會選擇集成第三方的IM庫,如融云,環(huán)信等等,下面我要給大家介紹另一種IM的實現(xiàn)方式,基于xmpp協(xié)議,服務(wù)器采用openfire,客戶端使用開源的XMPPFramework的方式實現(xiàn)即時通信

知識背景

XMPP相關(guān)

1. 什么是XMPP ?

XMPP的前身是Jabber,一個開源形式組織產(chǎn)生的網(wǎng)絡(luò)即時通信協(xié)議。XMPP目前被IETF國際標(biāo)準(zhǔn)組織完成了標(biāo)準(zhǔn)化工作。標(biāo)準(zhǔn)化的核心結(jié)果分為兩部分; 核心的XML流傳輸協(xié)議 基于XML流傳輸?shù)募磿r通訊擴展應(yīng)用 XMPP的核心XML流傳輸協(xié)議的定義使得XMPP能夠在一個比以往網(wǎng)絡(luò)通信協(xié)議更規(guī)范的平臺上。借助于XML易于解析和閱讀的特性,使得XMPP的協(xié)議能夠非常漂亮。

2. XMPP的基本網(wǎng)絡(luò)結(jié)構(gòu)是怎樣的?

XMPP中定義了三個角色,客戶端,服務(wù)器,網(wǎng)關(guān)。通信能夠在這三者的任意兩個之間雙向發(fā)生。服務(wù)器同時承擔(dān)了客戶端信息記錄,連接管理和信息的路由功能?;镜木W(wǎng)絡(luò)形式是單客戶端通過TCP/IP連接到單服務(wù)器,然后在之上傳輸XML。

3. XMPP通過TCP傳什么了?

傳輸?shù)氖桥c即時通訊相關(guān)的指令。在以前這些命令要么用2進制的形式發(fā)送(比如QQ),要么用純文本指令加空格加參數(shù)加換行苻的方式發(fā)送(比如MSN)。而XMPP傳輸?shù)募磿r通訊指令的邏輯與以往相仿,只是協(xié)議的形式變成了XML格式的純文本。這不但使得解析容易了,人也容易閱讀了,方便了開發(fā)和查錯。而XMPP的核心部分就是一個在網(wǎng)絡(luò)上分片斷發(fā)送XML的流協(xié)議。這個流協(xié)議是XMPP的即時通訊指令的傳遞基礎(chǔ),也是一個非常重要的可以被進一步利用的網(wǎng)絡(luò)基礎(chǔ)協(xié)議。所以可以說,XMPP用TCP傳的是XML流。

4.XMPP協(xié)議工作原理

所有從一個client到另一個client的消息和數(shù)據(jù)都要通過xmpp server
1.client連接到server
2.server利用被頂目錄系統(tǒng)的證書對其認(rèn)證
3.client指定目標(biāo)地址,讓server告知目標(biāo)狀態(tài)
4.server查找,連接并進行互相認(rèn)證
5.client間進行交互

5. XMPP協(xié)議地址格式

統(tǒng)一的JID(jabber identifier)
JID = name@domain/resource
其中name為用戶名,domain為服務(wù)器名稱,resource屬于用戶的位置或設(shè)備
例如: zhengzhijian@127.0.0.1/iphone

6. XMPP消息格式:
WechatIMG143.png

presence:元素確定用戶的狀態(tài)
message:用于兩個用戶之間發(fā)送的信息
iq:信息/請求,是一個請求-響應(yīng)機制,管理xmpp服務(wù)器上兩個用戶的轉(zhuǎn)換,允許他們通過響應(yīng)的xml格式的查詢和響應(yīng)

7. XMPP系統(tǒng)特點:

(1)客戶機/服務(wù)器通信模式
(2)分布式網(wǎng)絡(luò)
(3)簡單的客戶端
(4)XML的數(shù)據(jù)格式

8、 xmpp 協(xié)議缺點

數(shù)據(jù)負(fù)載太重:隨著通常超過 70%的 XMPP 協(xié)議的服務(wù)器的數(shù)據(jù)流量的存在和近60%的被重復(fù)轉(zhuǎn)發(fā),XML的數(shù)據(jù)格式,相對較重
沒有二進制數(shù)據(jù): XMPP 協(xié)議的方式被編碼為一個單一的長的 XML 文件,因此無法提供修改二進制數(shù)據(jù)。因此, 文件傳輸協(xié)議一樣使用外部的 HTTP。

openfire相關(guān)

1.什么是openfire

您可以使用它輕易的構(gòu)建高效率的即時通信服務(wù)器.
openfire安裝和使用都非常簡單,并利用Web進行管理。單臺服務(wù)器可支持上萬并發(fā)用戶。
由于是采用開放的XMPP協(xié)議,您可以使用各種支持XMPP協(xié)議的IM客戶端軟件登陸服務(wù).

環(huán)境配置

配置openfire

1.首先官網(wǎng)下載openfire openfire官網(wǎng),并根據(jù)自己的計算機系統(tǒng)進行下載

WeChat9d80c8786067cdea962160c74049ce66.png

例如我是macos,安裝好后再系統(tǒng)偏好設(shè)置中,開啟openfire服務(wù)器并進行配置


image.png
image.png

如果macos下不能正常開啟,可以嘗試用命令行開啟(我就是因為點擊開啟,偏好設(shè)置直接崩潰,所以嘗試的命令行開啟),開啟的前提是本機需要安裝java環(huán)境,注意自己本機的java環(huán)境的版本
java環(huán)境配置教程

用命令行的方式開啟openfire

1. sudo chmod -R 777 /usr/local/openfire/bin  來取得文件夾權(quán)限
a:sudo su

b: cd /usr/local/openfire/bin

c:export JAVA_HOME=`/usr/libexec/java_home`

d:echo $JAVA_HOME /Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home

e:   cd /usr/local/openfire/bin

f:   ./openfire.sh
WeChat0da447d017728b005bbd56d606651308.png

如果還有openfire啟動問題可參考openfire配置常見問題

2.配置openfire服務(wù)器
如果openfire開啟成功,可以在偏好設(shè)置中進行配置

  • 2.1配置語言


    image.png
  • 2.2配置為127.0.0.1即可


    image.png
  • 2.3配置數(shù)據(jù)庫


    image.png
image.png

驗證本地是否有簡歷的openfire數(shù)據(jù)庫,可以執(zhí)行以下命令
注:Mac安裝mysq,里面有更為詳盡的配置

alias mysql=/usr/local/mysql/bin/mysql   //輸入alias命令
mysql -u root -p  //連接數(shù)據(jù)庫,之后要輸入root的密碼
show databases; //查詢已創(chuàng)建的數(shù)據(jù)庫(將進入了mysql下,命令有分號)
image.png
  • 2.4設(shè)置管理員郵箱和登錄密碼即可


    image.png
  • 2.5登錄openfire管理后臺即可,默認(rèn)的用戶名admin,密碼為上一步中設(shè)置的密碼


    image.png
  • 2.5登錄成功進入后臺,如下圖


    image.png
  • 2.6我們嘗試創(chuàng)建一個用戶,并且使用openfire官網(wǎng)提供的spark進行登錄,看看是否可以正常登錄,如圖我們創(chuàng)建了一個iOScoderZZJ的用戶,spark也可以再openfire官網(wǎng)下載


    image.png

    image.png
  • 2.7登錄驗證下是否配置成功,在spark上進行登錄,驗證流程是否全部正確,如果登錄的時候有證書驗證的問題,可以參考文章Spark 連接證書失效解決方法

    image.png

  • 2.8登錄成功后,并且刷新openfire后臺


    image.png

    image.png
  • 2.9卸載openfire

sudo rm -rf /Library/PreferencePanes/Openfire.prefPanesudo 

sudo rm -rf /usr/local/openfiresudo 

sudo rm -rf /Library/LaunchDaemons/org.jivesoftware.openfire.plist

xmppframework大致連接流程


image.png

sdk相關(guān)
安卓smack
iOS XMPPFramework

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • XMPP簡介 XMPP協(xié)議簡介 XMPP協(xié)議(Extensible Messaging and PresenceP...
    不規(guī)則先生閱讀 6,435評論 2 31
  • 關(guān)于XMPP最權(quán)威的講解:http://www.jabbercn.org/RFC3920(這個才是最權(quán)威的,下面文...
    隨風(fēng)飄蕩的小逗逼閱讀 1,643評論 1 5
  • 前面關(guān)于即時通訊基礎(chǔ)Socket,大家學(xué)習(xí)使用XMPP之前可以先看看即時通訊系列之Socket簡介 前言 前段時間...
    音符上的碼字員閱讀 4,472評論 3 16
  • 一、即時通訊技術(shù) 即時通訊技術(shù)(IM -- Instant Messaging)-> 支持用戶在線實時交談 有許多...
    iOS_成才錄閱讀 8,648評論 10 76
  • XMPP(可擴展消息處理現(xiàn)場協(xié)議)是基于可擴展標(biāo)記語言(XML)的協(xié)議,它用于即時消息(IM)以及在線現(xiàn)場探測。X...
    不規(guī)則先生閱讀 794評論 0 1

友情鏈接更多精彩內(nèi)容