Openfire/XMPP學習之——一個簡單的Smack樣例

  昨天講了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

相關文章
相關標籤/搜索