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
openfire使用該模組是雙許可下的開源GPL許可證或COMERCIAL Jive軟體提供的軟體許可協議。
二:Openfire 配置
- 首先需要在Openfire上開啟Connection Manager監聽服務,具體流程如下所示
- 開啟 Openfire Admin Console
- 點選Server 選項卡下面的 Server
Settings
- 點選右側的 Connection Managers 頁面
- 選擇 Enable 單選按鈕以開啟 Connection Manager 監聽服務
- 設定 password 。例如, 123456 。
看圖:
現在配置Connection Manager。解壓從官網下載下來的打包. tar -zxvf connection_manager_3_6_3.tar.gz 包
- 修改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);
}
}
執行看結果。 - 檢視openfire的客戶端會話:
2. 檢視Connection Manager的有效客戶端會話數。