昨天講了Openfire的搭建和配置,今天來說一下Smack。若是對如何搭建和配置Openfire的,能夠參考Openfire/XMPP學習之——Openfire的安裝、配置。html
Smack是一個開源,易於使用的XMPP客戶端類庫。Smack API, 是一個 Java 的XMPP Client Library,也是由Jive Software開發。 優勢:編程簡單。 缺點:API並不是爲大量併發用戶設計,每一個客戶要1個線程,佔用資源大,1臺機器只能模擬有限(數千個)客戶。Smack是一個用 java 寫的XMPP客戶端代碼庫, 是 spark 的核心。java
Smack實現給用戶發送消息只要簡短的三行,固然這是針對舊版的,最新版的4.0.3建議不要使用,由於會出現不少莫名其妙的錯誤,推薦使用Smack 3.2.2(點我點我)。編程
XMPPConnection connection = new XMPPConnection(」jabber.org「); connection.login(」mtucker」, 「password」); connection.createChat(」jsmith@jivesoftware.com「).sendMessage(」Howdy!」);
使用Smack發送消息,大體思路分如下幾步:一、建立一個XMPPConnection對象;二、註冊包監聽器;三、登陸;四、獲取Chat對象,發送消息。服務器
如下是Java實現代碼:併發
1 package com.travellife.Smack; 2 3 import org.jivesoftware.smack.Chat; 4 import org.jivesoftware.smack.ChatManager; 5 import org.jivesoftware.smack.ConnectionConfiguration; 6 import org.jivesoftware.smack.MessageListener; 7 import org.jivesoftware.smack.PacketListener; 8 import org.jivesoftware.smack.XMPPConnection; 9 import org.jivesoftware.smack.XMPPException; 10 import org.jivesoftware.smack.filter.PacketFilter; 11 import org.jivesoftware.smack.filter.PacketTypeFilter; 12 import org.jivesoftware.smack.packet.Message; 13 import org.jivesoftware.smack.packet.Packet; 14 15 /** 16 * 一個簡單的XMPPConnection示例 17 */ 18 public class Smack { 19 public static XMPPConnection con; 20 public static Chat newChat; 21 public static ChatManager chatmanager; 22 23 public static void main(String[] args) throws InterruptedException { 24 try { 25 // 配置域和端口號,域能夠換成IP地址 26 ConnectionConfiguration config = new ConnectionConfiguration( 27 "www.travellife.com", 5222); 28 // 新建一個XMPPConnection對象 29 con = new XMPPConnection(config); 30 31 // 鏈接服務器 32 con.connect(); 33 // 用戶登陸 34 con.login("lion", "1025263614"); 35 // 是否已經經過身份驗證 36 System.out.println("Authenticated = " + con.isAuthenticated()); 37 38 addListener(); 39 // 獲取一個ChatManager對象 40 chatmanager = con.getChatManager(); 41 newChat = chatmanager.createChat("lion@example.com", 42 new MessageListener() { 43 public void processMessage(Chat chat, Message message) { 44 System.out.println("I'm sending: " 45 + message.getBody()); 46 } 47 }); 48 newChat.sendMessage("hi"); 49 } catch (XMPPException e) { 50 e.printStackTrace(); 51 } finally { 52 // 讓線程休眠 而後再關閉鏈接 53 Thread.sleep(20000); 54 con.disconnect(); 55 } 56 } 57 58 private static void addListener() { 59 // 包的過濾器 60 PacketFilter filterMessage = new PacketTypeFilter(Message.class); 61 // 建立包的監聽器 62 PacketListener myListener = new PacketListener() { 63 public void processPacket(Packet packet) { 64 // 以XML格式輸出接收到的消息 65 System.out.println(packet.toXML()); 66 System.out.println("From: " + packet.getFrom() + "\n"); 67 System.out.println("Body: " + ((Message) packet).getBody()); 68 69 try { 70 // 嘗試發送消息給服務器 71 newChat.sendMessage("hi again"); 72 } catch (XMPPException e) { 73 e.printStackTrace(); 74 } 75 } 76 }; 77 // 給鏈接註冊一個包的監聽器 78 con.addPacketListener(myListener, filterMessage); 79 } 80 }
運行以上代碼,你只會看到:Authenticated = true。這麼一行輸出,但你在Openfire的控制檯發送管理消息,就能夠看到以下輸出:post
做者:登天路學習
轉載請說明出處:http://www.cnblogs.com/travellife/spa