XMPP协议之Openfire安装与使用

Openfire 采用Java开发,开源的实时协做(RTC)服务器基于XMPP(Jabber)协议。Openfire安装和使用都很是简单,并利用Web进行管理,经过插件的方式进行功能集成,支持服务器集群。单台服务器可支持上万并发用户。Openfire安装和使用都很是简单,并利用Web进行管理。单台服务器可支持上万并发用户。因为是采用开放的XMPP协议,您能够使用各类支持XMPP协议的IM客户端软件登录服务。
官网:http://www.igniterealtime.org/
安装很简单,请参考文档:
http://www.linuxidc.com/Linux/2012-09/69539.htm
http://www.cnblogs.com/maxinliang/p/3582924.html

测试发送消息:类库使用smack,客户端基于spark.html

添加依赖:java

<dependency>
			<groupId>org.igniterealtime.smack</groupId>
			<artifactId>smack</artifactId>
			<version>3.2.1</version>
		</dependency>
		<dependency>
			<groupId>org.igniterealtime.smack</groupId>
			<artifactId>smackx</artifactId>
			<version>3.2.1</version>
		</dependency>
代码参考:

package cn.slimsmart.xmpp.demo;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;

import org.jivesoftware.smack.Chat;
import org.jivesoftware.smack.Connection;
import org.jivesoftware.smack.ConnectionConfiguration;
import org.jivesoftware.smack.MessageListener;
import org.jivesoftware.smack.Roster;
import org.jivesoftware.smack.RosterEntry;
import org.jivesoftware.smack.SmackConfiguration;
import org.jivesoftware.smack.XMPPConnection;
import org.jivesoftware.smack.XMPPException;
import org.jivesoftware.smack.packet.Message;

public class XmppChatText {

	private static Connection connection = null;

	public static void main(String[] args) throws XMPPException, Exception {
		SmackConfiguration.setKeepAliveInterval(3000);
		SmackConfiguration.setPacketReplyTimeout(6000);
		connection = getConnection();
		connection.connect();// 开启链接
		Thread.sleep(10000);
		connection.login("test", "123456");// 利用用户名和密码登陆
		SendBCMsg("广播消息","admin");
		SendMsg("您好吗");
		System.out.println(getRosterList());
		System.out.println(getRoster());
		while(true);
	}

	/**
	 * 获取链接
	 * 
	 * @return
	 */
	public static Connection getConnection() {
		// 新建链接配置对象,设置服务器IP和监听端口
		ConnectionConfiguration connectionConfig = new ConnectionConfiguration("192.168.18.67", 5222);
		// 容许自动链接
		connectionConfig.setReconnectionAllowed(true);
		connectionConfig.setSendPresence(true);
		/** 是否启用压缩 */
		connectionConfig.setCompressionEnabled(true);
		/** 是否启用安全验证 */
		connectionConfig.setSASLAuthenticationEnabled(true);
		/** 是否启用调试 */
		connectionConfig.setDebuggerEnabled(false);
		Connection connection = new XMPPConnection(connectionConfig);
		return connection;
	}

	/**
	 * 销毁链接
	 * 
	 * @param connection
	 */
	public static void destory() {
		if (connection != null) {
			connection.disconnect();
			connection = null;
		}
	}

	/**
	 * 发送广播消息
	 */
	public static void SendBCMsg(String messgage, String groupName) throws XMPPException {
		Message m = new Message();
		m.setBody(messgage);// 设置消息。
		m.setTo(groupName + "@xmpp");// [groupname]@[serviceName].[serverName]
		connection.sendPacket(m);
	}

	/**
	 * 发送即便消息
	 * @param username
	 * @param pass
	 * @param messgage
	 * @throws XMPPException
	 */
	public static void SendMsg(String messgage) throws XMPPException {
		Chat mychat = connection.getChatManager().createChat("admin@xmpp", // 接收端的JID,JID是要加域的
				new MessageListener() {
					@Override
					public void processMessage(Chat chat, Message message) {
						String messageBody = message.getBody();
						System.out.println("收到信息:" + messageBody + " " + message.getFrom());
					}
				});
		mychat.sendMessage(messgage); // 发送信息
	}

    /** 
     * 获取好友列表 
     *  
     * @param username 
     * @param pass 
     * @return 
     * @throws XMPPException 
     */  
    public static List<RosterEntry> getRosterList()  
            throws XMPPException {  
        Collection<RosterEntry> rosters = connection.getRoster().getEntries();  
        for (RosterEntry rosterEntry : rosters) {  
            System.out.print("name: " + rosterEntry.getName() + ",jid: "  
                    + rosterEntry.getUser()); // 此处可获取用户JID  
            System.out.println();  
        }  
        return null;  
    }  
	
    /** 
     * 获取用户列表(含组信息) 
     *  
     * @param username 
     * @param pass 
     * @return 
     * @throws XMPPException 
     */  
    public static List<RosterEntry> getRoster()  
            throws XMPPException {  
        Roster roster = connection.getRoster();  
        List<RosterEntry> EntriesList = new ArrayList<RosterEntry>();  
        Collection<RosterEntry> rosterEntry = roster.getEntries();  
        Iterator<RosterEntry> i = rosterEntry.iterator();  
        while (i.hasNext()) {  
            EntriesList.add(i.next());  
        }  
        return EntriesList;  
    }  
}
其余功能api参考:

1.smack开发文档linux

2.基于xmpp openfire smack开发之openfire介绍和部署
api

3.基于xmpp_openfire_smack开发之smack类库介绍和使用安全