XMPP學習3-IM即時消息

IM

IM(Instant Meassge),核心是提供網絡上從一個地方到另一個地方的快速路由信息的能力,因此,XMPP 服務器被優化用來在很小的延遲裏處理大量的相對小的消息。

消息投遞

XMPP服務器連接方式如下(無中間服務器跳躍)
這裏寫圖片描述
消息傳遞流程:
1 發起用戶客戶端通過client-to-server XML流推送消息節到自身服務器
2 發起用戶服務器在節上貼上from地址的郵戳,並檢查to地址
3 發起用戶服務器通過server-to-server XML流路由消息到目的用戶服務器(無中間服務器跳躍)
4 目的服務器接收到消息節,服務器檢查目的用戶是否在線,如果在線,服務器立即通過server-to-client XML 流傳遞
消息到目的用戶的在線設備中的一個或多個
特殊投遞
chat 和 normal 消息被接收人的服務器以一種特定的方式處理:如果消息是投遞到賬戶的 bare JID(裸JID),服務器立即把消息傳遞給當前與賬戶關聯的優先級最高的資源。

聊天狀態通告

聊天狀態描述了你所參與的對話,在消息節中嵌入相關的聊天狀態元素來進行對話中的狀態改變。
示例:

<message from="[email protected]"
                     to="[email protected]"
                     type="chat">
         <body>Hi Daye Nihao!</body>
         <active xmlns="http://jabber.org/protocol/chatstates"/>
</message>

狀態如下:
1 starting 某人開始一個對話,但是你還沒有參與進去
2 active 你正參與在對話中,當前沒有組織消息,而是在關注
3 composing 你正在組織一個消息
4 paused 你正在組織一個消息,但由於某些原因停止組織消息
5 inactive 你一段時間沒有參與這個對話
6 gone 你參與的對話已結束(例:你關閉了聊天窗口)
狀態轉變圖
這裏寫圖片描述

格式化消息

XMPP讓你能夠自定義消息的外觀或表達,利用Html子集或者CSS格式文本,包括許多流行的風格格式,包括顏色、字體、文字大小、字體粗細(例如,粗體)和字體風格(例如,斜體)、字體邊緣、文本對齊(例如,居中)、和文本裝飾(例如,下劃線)。
示例:

<message from="[email protected]"
          to="[email protected]"
          type="chat">
         <body>I love this movie I saw last night, it's awesome!</body>
         <html xmlns="http://jabber.org/protocol/xhtml-im">
            <body xmlns="http://www.w3.org/1999/xhtml">
               <p>
                  I <em>love</em>, this new movie I saw last night,it's <strong>awesome</strong>!
               </p>
           </body>
        </html>
</message>

阻止和過濾通訊

阻止-一個簡單方法
需阻止某用戶通訊時,若服務器支持簡單通訊阻止,只需要向自己服務器發送一個適當的 IQ-set即可:

<iq from="[email protected]/Psi"
         id="yu4er81v"
         to="[email protected]"
         type="set">
     <block xmlns="urn:XMPP:blocking">
         <item jid="[email protected]"/>
     </block>
</iq>

意味着user2無法用任何方法獲取user1的在線信息,user1服務器會忽略所有來自user2的<message/>以及應答IQ-get或IQ-set爲<service-unavailable/>,而且會阻止user1向user2發送消息或者IQ請求,並返回<not-acceptable/>錯誤
在通 簡單訊阻止中 ,需要解封時,也只需要向自己服務器發送一個適當的 IQ-set即可:

<iq from="[email protected]/Psi"
         id="ng23h57w"
         to="[email protected]"
         type="set">
     <unblock xmlns="urn:XMPP:blocking">
         <item jid="[email protected]"/>
     </unblock>
</iq>

高級阻止與過濾
通過隱私列表實現,隱私列表是一個針對所有交通匹配的規則列表,包括進來的和出去的

<list name="mylist">
       <item type="jid" value="[email protected]" action="deny" order="1">
             <iq/>
             <message/>
             <presence-out/>
       </item>
       <item type="group" value="C208" action="deny" order="2">
             <presence-in/>
         </item>
         <item action="allow" order="3"/>
</list>
發佈了48 篇原創文章 · 獲贊 10 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章