1. 程式人生 > >XMPP協議之Openfire Connection Manager 配置

XMPP協議之Openfire Connection Manager 配置

一:Openfire Connection Manager 簡介
     Openfire Connection Manager
Openfire伺服器的擴充套件,它可以透明的處理大規模併發XMPP客戶端對Openfire伺服器的聯接。根據Connection Manager主頁介紹,每個Connection Manager可以處理至少5000個併發使用者<官方文件>。
    Openfire伺服器可以連線一個或多個Connection Manager。每個Connection Manager可以處理一個或多個支援XMPP的客戶端。為Openfire配置Connection Manager

後,支援XMPP的客戶端僅需要連線Connection Manager,由Connection Manager負責管理對來自XMPP客戶端對Openfire伺服器的連線。下圖是Openfire伺服器配置Connection Manager後的系統架構。
     

 openfire使用該模組是雙許可下的開源GPL許可證或COMERCIAL Jive軟體提供的軟體許可協議。
   二:Openfire 配置

  1. 首先需要在Openfire上開啟Connection Manager監聽服務,具體流程如下所示
  2. 開啟 Openfire Admin Console
  3. 點選Server 選項卡下面的 Server Settings
     頁面
  4. 點選右側的 Connection Managers 頁面
  5. 選擇 Enable 單選按鈕以開啟 Connection Manager 監聽服務
  6. 設定 password 。例如, 123456 。
    看圖:

現在配置Connection Manager。解壓從官網下載下來的打包. tar -zxvf connection_manager_3_6_3.tar.gz 包

  1. 修改domain,conf下面的manager.xml檔案 18行。修改如下:
<domain>xx.xx.xx.xx</domain>
<!-- IP address or hostname of the XMPP server. If not defined then a DNS SRV lookup
of the domain will be performed. -->
<!-- <hostname></hostname> -->
<!-- TCP port to connect to the XMPP server on. -->
<port>5262</port>
<!-- Password to use to log into the server. This property is required. -->
<password>123456</password>

這裡需要填寫Openfire所在的域名、在Openfire中開啟的監聽埠和在Openfire中設定的密碼

  2. 修改certificate修改<certificate>標籤下面的 <verify>true</verify> 改成 <verify>false</verify> 原因是:配置預設是需要CA頒發的證書。固我們現在先不用ca證書。而且這個證書也比較麻煩。意思上線了就有必要了。

 配置到這裡。Connection Manager的配置基本上已經完成。現在我們啟動bin/cmanager.sh檔案試試。重新整理openfire 控制檯。看下圖結果:

已經出現了我們剛剛配置的Connection Manager。說明已經配置成功。oy.
下面我們來配置客戶端,客戶端我是用的smack模擬。ip用Connection Manager port還是原來的5222。下面是我smack模擬程式碼

package com.amack;
 
import java.util.UUID;
 
import org.jivesoftware.smack.AccountManager;
import org.jivesoftware.smack.ConnectionConfiguration;
import org.jivesoftware.smack.PacketListener;
import org.jivesoftware.smack.XMPPConnection;
import org.jivesoftware.smack.XMPPException;
import org.jivesoftware.smack.filter.PacketTypeFilter;
import org.jivesoftware.smack.packet.Message;
import org.jivesoftware.smack.packet.Packet;
 
public class Client {
 
    private String host = "xx.xx.xx.xx";
    private int port = 5222;
 
    public void run() {
        connection();
 
    }
 
    public static void main(String[] args) {
        new Client().run();
    }
 
    public void connection() {
        // XMPPConnection.DEBUG_ENABLED = true;
        final ConnectionConfiguration config = new ConnectionConfiguration(
                host, port);
        config.setReconnectionAllowed(true);
        config.setSendPresence(true);
        config.setSASLAuthenticationEnabled(false);
        XMPPConnection connection = new XMPPConnection(config);
 
        try {
            connection.connect();
            Thread.sleep(9000);
            String userName = newRandomUUID();
            String passWord = newRandomUUID();
            if (regist(connection, userName, passWord)) {
                connection.login(userName, passWord);
                print("login  " + connection.isConnected() + "");
                connection.addPacketListener(new PacketListener() {
                    @Override
                    public void processPacket(Packet paramPacket) {
                        Message message = (Message) paramPacket;
                        print("receive message:  " + message.toXML());
                    }
                }, new PacketTypeFilter(Message.class));
            }
 
        } catch (XMPPException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
 
    /**
     * 註冊
     * 
     * @param account
     *            註冊帳號
     * @param password
     *            註冊密碼
     * @return 1、註冊成功 0、伺服器沒有返回結果2、這個賬號已經存在3、註冊失敗
     */
    public boolean regist(XMPPConnection connection, String account,
            String password) {
        if (connection == null)
            return false;
        AccountManager accountManager = new AccountManager(connection);
        try {
            accountManager.createAccount(account, password);
        } catch (XMPPException e1) {
        }
        return true;
 
    }
 
    public String newRandomUUID() {
        return UUID.randomUUID().toString();
    }
 
    public void print(String str) {
        System.out.println(str);
    }
}
執行看結果。 
  1. 檢視openfire的客戶端會話:

2.  檢視Connection Manager的有效客戶端會話數。
 

轉至:http://my.oschina.net/jielucky/blog/167367