1. 程式人生 > >XMPP和即時通訊內容學習(一)

XMPP和即時通訊內容學習(一)

一直聽朋友們說xmpp,怎麼好怎麼流行,我也挺感興趣,可是由於最近工作很忙,沒有時間看,今天終於抽出時間研究了一下,首先是XMPP到底是什麼?

XMPP是:是一種以XML為基礎的開放式實時通訊協議,是經由網際網路工程工作小組(IETF)通過的網際網路標準。XMPP因為被Google Talk應用而被廣大網民所接觸。

優點:

1、開放

XMPP協議是自由、開放、公開的,並且易於瞭解。而且在客戶端伺服器元件原始碼庫等方面,都已經各自有多種實現。

2、標準

網際網路工程工作小組(IETF)已經將Jabber的核心XML流協議以XMPP之名,正式列為認可的實時通訊及Presence技術。而XMPP
的技術規格已被定義在RFC 3920RFC 3921。任何IM供應商在遵循XMPP協議下,都可與Google Talk實現連線。
3、證實可用
第一個Jabber(現在XMPP)技術是Jeremie Miller在1998年開發的,現在已經相當穩定;數以百計的開發者為XMPP技術而努力。今日的網際網路上有數以萬計的XMPP伺服器運作著,並有數以百萬計的人們使用XMPP實時傳訊軟體。
4、分散式
XMPP網路的架構和電子郵件十分相像;XMPP核心協議通訊方式是先建立一個stream,XMPP以TCP傳遞XML資料流,沒有中央主伺服器。任何人都可以執行自己的XMPP伺服器,使個人及組織能夠掌控他們的實時傳訊體驗。
5、安全
任何XMPP協議的伺服器可以獨立於公眾XMPP網路(例如在企業內部網路中),而使用SASLTLS等技術的可靠安全性,已內置於核心XMPP技術規格中。
6、可擴充套件
XML名稱空間的威力可使任何人在核心協議的基礎上建造定製化的功能;為了維持通透性,常見的擴充套件由。
7、彈性佳
XMPP除了可用在實時通訊的應用程式,還能用在網路管理、內容供稿、協同工具、檔案共享、遊戲、遠端系統監控等。
8、多樣性
用XMPP協議來建造及佈署實時應用程式及服務的公司及開放原始碼計劃分佈在各種領域;用XMPP技術開發軟體,資源及支援的來源是多樣的,使得使你不會陷於被“綁架”的困境。

缺點:

1、資料負載太重 
隨著通常超過70%的XMPP協議的伺服器的資料流量的存在和近60%的被重複轉發,XMPP協議目前擁有一個大型架空中存在的資料提供給多個收件人。新的議定書正在研究,以減輕這一問題。(個人觀點:一直不是很火的原因就是這個,希望早點改進) 2、沒有二進位制資料  XMPP協議的方式被編碼為一個單一的長的XML檔案,因此無法提供修改二進位制資料。因此, 檔案傳輸協議一樣使用外部的HTTP。如果不可避免,XMPP協議還提供了帶編碼的檔案傳輸的所有資料使用的Base64。至於其他二進位制資料加密會話(encrypted conversations)或圖形圖示(graphic icons)以嵌入式使用相同的方法。

有了上述的基本瞭解之後相信各位也有自己的主意,是否要看接下來的內容:

即時通訊(Instant Messenger),就是現在的QQ、MSN、Gtalk等軟體都是即時通許軟體。啟動gtalk就是其中基於xmpp協議實現的一款即時通訊軟體。但是開發一款這種軟體還是任重而道遠的。

實現XMPP 即時通許首要要了解openfire(服務端)、客戶端(下載潘迪安、spark、如意通等軟體,前期輔助學習)、smack(它實現了xmpp的協議)。上述如何使用和配置我就不多講了,可以訪問如下:

     http://www.cnblogs.com/xiaodao/archive/2013/04/05/3000554.html 或 http://blog.csdn.net/shimiso/article/details/8816558(感謝內容提供者,我也是跟著他們學習,加以總結,加深自己的印象,把自己遇到問題的地方和大家分享一下)。

     現在我相信同學都做好了相應的配置了,直接進入正題:

      我用的mac本,潘迪安和如意通我是不用想了,我下載是spark。然後進入openfire的管理端

選擇使用者/組,然後選擇新建使用者(同學們的資料都做關聯了吧),出了管理員之外在建立兩個使用者:


然後開啟spark,登陸介面如下:輸入你的使用者名稱和密碼(各位不要選擇自動登陸啊,否則你要改伺服器和使用者名稱的時候就有你頭疼的了):


點選spark的高階,做如下配置:


確定之後你就可以登陸了。如果登陸不了可能有兩個原因:

第一:資料庫沒起

第二:openfire沒起(注:openfire在mac自動啟動,建議每次想用的時候都重啟了,會避免很多問題,如後管無法登陸,新建使用者不生效等問題就出必殺:重啟)。

接下來用Eclipse建立一個java的工程,細節不多說了,程式碼如下:

ConnectionConfiguration connectionConfig = new ConnectionConfiguration("127.0.0.1", Integer.parseInt("5222"),"127.0.0.1");

// 允許自動連線

connectionConfig.setReconnectionAllowed(true);

connectionConfig.setSendPresence(true);

Connection connection = new XMPPConnection(connectionConfig);

try {

connection.connect();// 開啟連線

} catch (XMPPException e) {

throw new IllegalStateException(e);

}

  connection.login("bjsujb1", "123456"); //第二個使用者和密碼

  System.out.println(connection.getUser());   

  connection.getChatManager().createChat("[email protected]",null).sendMessage("Hello word!"); 

ConnectionConfiguration這個類初始化的時候三個引數分辨為第一個:伺服器地址 第二個:對應埠號  第三個:代理伺服器地址(可不寫,展示也可隨便寫)。

現在程式碼你會發現spark收到了一條bjsujb1所發來的訊息,內容是Hello word


相關推薦

XMPP即時通訊內容學習

一直聽朋友們說xmpp,怎麼好怎麼流行,我也挺感興趣,可是由於最近工作很忙,沒有時間看,今天終於抽出時間研究了一下,首先是XMPP到底是什麼? XMPP是:是一種以XML為基礎的開放式實時通訊協議,是經由網際網路工程工作小組(IETF)通過的網際網路標準。XMPP因為被Go

Android 即時通訊開發小結

《Android 即時通訊開發小結》基於IM Andriod 開發的各種常見問題,結合網易雲信即時通訊技術的實踐,對 IM 開發做一個全面的總結。相關推薦閱讀:、客戶端架構作為一個 IM 軟體,最重要的一個特性就是保證訊息的達到率和實時性。達到率受伺服器效能和設計協議影響,後

對TCG的概要分析對TPM的學習

(YOUXIANG:lichunwen1987ATqq。com) 參考TCG Specification Architecture Overview 1.4 。http://www.trustedcomputinggroup.org/ 檢索TCG Specification

學習使用Docker、Docker-ComposeRancher搭建部署Pipeline

docker 部署 rancher 雲 微服務 說明 這篇文章是一系列文章的第一篇,在這一系列文章中,我們想要分享我們如何使用Docker、Docker-Compose和Rancher完成容器部署工作流的故事。我們想帶你從頭開始走過pipeline的革命歷程,重點指出我們這一路上遇到的

canvas學習:線條,圖像變換狀態保存

itl height tar 默認 class limit 方法 星空 stop canvas學習(一):線條,圖像變換和狀態保存 一:繪制一條線段: var canvas = document.getElementById(‘canvas‘) var ctx = can

Redis學習、安裝Redis客戶端

arguments edi 1.5 roc tex ado host ges unknown Redis學習(一)、安裝Redis和客戶端 一、Windows安裝Redis 1、下載安裝包Redis-x64-3.0.504.zip到本地 2、解壓 3、打開CMD,切換到解

DTL語言學習模板變數{% if %}標籤的使用

目前市面上有非常多的模板系統,其中最知名最好用的就是DTL和Jinja2。 DTL是Django Template Language三個單詞的縮寫,也就是Django自帶的模板語言。當然也可以配置Django支援Jinja2等其他模板引擎,但是作為Django內建的模板語言,DTL能和D

docker學習:docker安裝架構

本筆記根據51CTO的CloudMan博主的部落格而記錄的。 本節主要學習 docker安裝和解除安裝 docker的架構 一、Docker的安裝和解除安裝   Docker的安裝   1、安裝之前,要先把舊版的Docker給解除安裝了,以下是Docker官網上的安裝前解除安裝Dock

webService學習基本概念環境搭建

1、webService概念理解: WebService是一種跨程式語言和跨作業系統平臺的遠端呼叫技術。 所謂遠端呼叫,就是一臺計算機a上 的一個程式可以呼叫到另外一臺計算機b上的一個物件的方法,譬如,銀聯提供給商場的pos刷卡系統,商場的POS機轉賬呼叫的轉賬方法的程式碼其實是跑在銀

深度學習——deepNN模型實現攝像頭實時識別人臉表情C++python3.6混合程式設計

一、背景介紹 最近需要做人臉識別方向的東西,就被分配了新的任務,利用攝像頭實時檢測人臉表情,並製作成一個小軟體,這裡當然要用C++實現,並用C++做成一個介面。 由於博主之前用python做過類似的小程式,因此這裡的模型實現主要採用了python,為了用C++實現介面,這裡採用C++呼叫py

Java學習:第一章 計算機、程式Java概述

第一章 計算機、程式和Java概述   (1)匯流排--》    儲存裝置、記憶體、CPU、通訊裝置、輸入裝置、輸出裝置; (2)語言: 機器語言: 二進位制形式

高效學習源頭、原理知識地圖

所有內容均來自左耳朵耗子的極客專欄 挑選知識和資訊源 如果你覺得用百度搜中文關鍵詞就可以找到自己想要的知識,那麼你一定遠遠落後於這個時代了。如果你用 Google 英文關鍵詞可以找到自己想要的知識,那麼你算是能跟得上這個時代。如果你能在社群裡跟社群裡的大牛交流得到答

ES6學習---letconst用法

1.let用法 (1)存在作用域,即let宣告函式會在花括號中執行 (2)es6規定暫時性死區,暫時性死區通俗的來講就是一個區塊中存在let和const宣告的變數,那麼該區塊會形成封閉作用域,在let和const宣告之前使用該變數都會報錯。 //例子1 { console.lo

機器學習_1.神經網路的研究學習

人工神經網路      — —百度百科          人工神經網路(Artificial Neural Network,即ANN ),是20世紀80 年代以來人工智慧領域興起的研究熱點。它從資訊處理角度對

深度學習 計算機如何處理識別圖片揭祕

前言        先來一張美景圖,欣賞一下大自然,順便大家猜猜這是哪裡?        有時候真感嘆大自然的雄偉壯闊,自然形成了無數的山和風景不需要任何點綴,有

Redis學習01_redis安裝部署centos Redis學習:CentOS下redis安裝部署

原文: http://www.cnblogs.com/herblog/p/9305668.html Redis學習(一):CentOS下redis安裝和部署   1.基礎知識  redis是用C語言開發的一個開源的高效能鍵值對(key-value)資料庫。它通過提

postgresql基礎學習——基本命令部分邏輯結構

目錄   安裝和配置 基本操作 邏輯結構 結構簡圖 結構說明 schema操作 小結: 安裝和配置 PostGresql ubuntu安裝: apt-get install postgresql service postgresql st

演算法學習揹包佇列

揹包類bag public class My_Bag<T> { public My_Bag() { array = null; } private T[] array;

演算法學習揹包佇列優化

以棧為例,之前是增加一個元素就要重新new一個比原來大1的陣列出來替換原始陣列。 public void Push(T item) { int size = Size(); T[] newarray = new T[size + 1]; for (int i =

CSS簡單學習-CSS介紹CSS引入方式

CSS作用和發展 CSS(Cascading Style Sheet),稱之為層疊樣式表 一種專門描述結構文件的變現方式文件,主要用於網頁風格設計,包括字型大小,顏色,以及元素的精確定位等。 在傳統的網頁設計裡,使用CSS能讓單調的HTML網頁更富表現力 作用: