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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

即时聊天IM之一 XMPP协议简述

發(fā)布時間:2023/12/9 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 即时聊天IM之一 XMPP协议简述 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
合肥程序員群:49313181。??? 合肥實(shí)名程序員群:128131462 (不愿透露姓名和信息者勿加入)
Q? Q:408365330???? E-Mail:egojit@qq.com

?綜述:

之前小規(guī)模的IM一直通過百度云推實(shí)現(xiàn)模擬IM,這種局限性比較多。公司很多的項(xiàng)目都需要IM集成,所以最終想想還是自己搭建XMPP服務(wù)器來實(shí)現(xiàn)IM功能。這樣可控性比較強(qiáng)。可以實(shí)現(xiàn)各種需求,首先就有必要學(xué)習(xí)XMPP協(xié)議。了解XMPP基礎(chǔ)協(xié)議的情況下才能更好的使用smack庫,已經(jīng)自定義各種擴(kuò)展。

XMPP簡介:

XMPP協(xié)議(Extensible Messaging and PresenceProtocol,可擴(kuò)展消息處理現(xiàn)場協(xié)議) 它是一種基于XML基礎(chǔ)上實(shí)現(xiàn)的一種協(xié)議,是聊天通訊的一個標(biāo)準(zhǔn)協(xié)議。Jabber最早實(shí)現(xiàn)XMPP協(xié)議的。首先我們知道XML格式擴(kuò)展性比較強(qiáng),而且它又具有HTML這種穿透防火墻的功能,所以不易被防火墻攔截,因此在此基礎(chǔ)上的XMPP協(xié)議當(dāng)然也具有這些特性,另外XML是和平臺無關(guān)的,實(shí)現(xiàn)多平臺數(shù)據(jù)交換沒有任何問題,XMPP肯定也是如此。

XMPP協(xié)議特點(diǎn):

1.XMPP協(xié)議系統(tǒng)是一個分布式的系統(tǒng),每臺服務(wù)器可以控制自己的系統(tǒng)資源,另一方面它也可以實(shí)現(xiàn)系統(tǒng)間資源交換。XMPP服務(wù)器利用開放的XML協(xié)議來進(jìn)行S2S(Serverto Server)通信,就像在C2S(Client to Server)一樣。相比之下,大多數(shù)的IM系統(tǒng)使用了只是支持C2S/S2C通信的協(xié)議,因此Jabber/XMPP服務(wù)器具有更大的靈活性。

2.XMPP協(xié)議是公開的非私密的,很多程序是開放源代碼。XMPP協(xié)議客戶端和服務(wù)器端的交互要經(jīng)由XML流。普通的聊天消息類型(message),改變用戶登錄狀態(tài)(presence),傳遞消息內(nèi)容或查詢/更新(info/quey)應(yīng)用是通過命名XML的命名空間(namespace)建立的。

3.狀態(tài)(Presence)在整個聊天鏈接中都是維持存在的,XMPP協(xié)議有在網(wǎng)絡(luò)中維持存在和可用信息的能力。

4.XMPP允許建立并行的TCP套接字連接對所有連接上的客戶端和服務(wù)器端。一旦建立連接,會一直維持。因?yàn)殒溄右恢北3种?#xff0c;那么 設(shè)置、用戶認(rèn)證、用戶登錄狀態(tài)查找功能都不用每次都重復(fù)執(zhí)行。

5.Jabber/XMPP系統(tǒng)是模塊化的,Jabber/XMPP的設(shè)計(jì)注重如何實(shí)現(xiàn)可伸縮性、安全性以及擴(kuò)展性。

?XMPP協(xié)議的解析:

在XMPP協(xié)議中一直存在著三個關(guān)鍵點(diǎn)和角色,服務(wù)端,網(wǎng)關(guān)以及客戶端(手機(jī),pc,平板……),我們這里所講的架構(gòu)都是服務(wù)端/客戶端模式,而非客戶端直連

1.消息解析:

Jabber/XMPP系統(tǒng)通過XML流傳輸數(shù)據(jù),XML從客戶端到服務(wù)端或者XML流從服務(wù)端到客戶端。這種XML流有三個頂層XML標(biāo)簽元素:<message/>,<presence/>和<iq/>,當(dāng)然每個標(biāo)簽都包含子標(biāo)簽元素和屬性,下面將描述這些元素:

  一>.消息標(biāo)簽元素<message/>:

  IM最基本的功能就是用戶之間進(jìn)行聊天消息發(fā)送,這個元素就是承擔(dān)著這種功能。每個message都有多個屬性"from"屬性和"to"屬性就是其中兩個,顧名思義就是信息誰發(fā)的,又是發(fā)給誰,也就是發(fā)送人地址和接收人地址。消息還有"type"屬性,標(biāo)志消息類型,這些都有固定的類型,當(dāng)然消息也有固定的身份id屬性,這個id標(biāo)志每一天消息,這是唯一區(qū)分消息的。

  二>用戶狀態(tài)元素<presence/>:

  用戶登錄后可以是:在線的available,隱身的Hide,又或者是離線的unavailable。用戶登錄上線后服務(wù)器會把消息發(fā)送給用戶,如果用戶不在線,那么服務(wù)器會把消息存儲起來,這樣可以實(shí)現(xiàn)離線消息。<presence/>元素包含<show/>和<status/>兩個元素,<show/>子元素是描述<status>的.

Presence主要有兩個用途: 1)告訴服務(wù)器所有客戶端當(dāng)前所處的狀態(tài),2)發(fā)出添加/刪除好友請求.

Presence.Type枚舉值如下:

  • available: 表示處于在線狀態(tài)
  • unavailable: 表示處于離線狀態(tài)
  • subscribe: 表示發(fā)出添加好友的申請
  • subscribed:表示好友請求確認(rèn)
  • unsubscribe: 表示發(fā)出刪除好友的申請
  • unsubscribed: 表示拒絕添加對方為好友
  • error: 表示presence信息報中包含了一個錯誤消息。

 

?

 三>消息/查詢元素<iq/>

  Jabber/XMPP協(xié)議的最后一個訂層元素就是<iq/>元素。Info/Query的縮寫就是iq 顧名思義就是信息/查詢,通過這個元素可以獲取各個端之間的消息,它是請求響應(yīng)的也就是查詢反饋模式。每個iq的目的都是不同的,它們通過命名空間namespace來區(qū)分。iq也有"from" "type" "id" 三個屬性,type屬性和http協(xié)議差不多有g(shù)et 和post值.每一個IQ-get?或IQ-set?節(jié)均必須接收響應(yīng)的IQ-result?或IQ-error?節(jié)。通過這種查詢/反饋結(jié)果的方式客戶端和服務(wù)器通信

?

轉(zhuǎn)載于:https://www.cnblogs.com/egojit/p/4874318.html

總結(jié)

以上是生活随笔為你收集整理的即时聊天IM之一 XMPP协议简述的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。