关闭

XMPP协议之Openfire安装与使用

标签: openfirexmpp服务器
370人阅读 评论(0) 收藏 举报
分类:

原文地址:http://blog.csdn.net/zhu_tianwei/article/details/46314197



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.

添加依赖:

  1. <dependency>  
  2.             <groupId>org.igniterealtime.smack</groupId>  
  3.             <artifactId>smack</artifactId>  
  4.             <version>3.2.1</version>  
  5.         </dependency>  
  6.         <dependency>  
  7.             <groupId>org.igniterealtime.smack</groupId>  
  8.             <artifactId>smackx</artifactId>  
  9.             <version>3.2.1</version>  
  10.         </dependency>  
代码参考:
  1. package cn.slimsmart.xmpp.demo;  
  2.   
  3. import java.util.ArrayList;  
  4. import java.util.Collection;  
  5. import java.util.Iterator;  
  6. import java.util.List;  
  7.   
  8. import org.jivesoftware.smack.Chat;  
  9. import org.jivesoftware.smack.Connection;  
  10. import org.jivesoftware.smack.ConnectionConfiguration;  
  11. import org.jivesoftware.smack.MessageListener;  
  12. import org.jivesoftware.smack.Roster;  
  13. import org.jivesoftware.smack.RosterEntry;  
  14. import org.jivesoftware.smack.SmackConfiguration;  
  15. import org.jivesoftware.smack.XMPPConnection;  
  16. import org.jivesoftware.smack.XMPPException;  
  17. import org.jivesoftware.smack.packet.Message;  
  18.   
  19. public class XmppChatText {  
  20.   
  21.     private static Connection connection = null;  
  22.   
  23.     public static void main(String[] args) throws XMPPException, Exception {  
  24.         SmackConfiguration.setKeepAliveInterval(3000);  
  25.         SmackConfiguration.setPacketReplyTimeout(6000);  
  26.         connection = getConnection();  
  27.         connection.connect();// 开启连接  
  28.         Thread.sleep(10000);  
  29.         connection.login("test""123456");// 利用用户名和密码登录  
  30.         SendBCMsg("广播消息","admin");  
  31.         SendMsg("您好吗");  
  32.         System.out.println(getRosterList());  
  33.         System.out.println(getRoster());  
  34.         while(true);  
  35.     }  
  36.   
  37.     /** 
  38.      * 获取连接 
  39.      *  
  40.      * @return 
  41.      */  
  42.     public static Connection getConnection() {  
  43.         // 新建连接配置对象,设置服务器IP和监听端口  
  44.         ConnectionConfiguration connectionConfig = new ConnectionConfiguration("192.168.18.67"5222);  
  45.         // 允许自动连接  
  46.         connectionConfig.setReconnectionAllowed(true);  
  47.         connectionConfig.setSendPresence(true);  
  48.         /** 是否启用压缩 */  
  49.         connectionConfig.setCompressionEnabled(true);  
  50.         /** 是否启用安全验证 */  
  51.         connectionConfig.setSASLAuthenticationEnabled(true);  
  52.         /** 是否启用调试 */  
  53.         connectionConfig.setDebuggerEnabled(false);  
  54.         Connection connection = new XMPPConnection(connectionConfig);  
  55.         return connection;  
  56.     }  
  57.   
  58.     /** 
  59.      * 销毁连接 
  60.      *  
  61.      * @param connection 
  62.      */  
  63.     public static void destory() {  
  64.         if (connection != null) {  
  65.             connection.disconnect();  
  66.             connection = null;  
  67.         }  
  68.     }  
  69.   
  70.     /** 
  71.      * 发送广播消息 
  72.      */  
  73.     public static void SendBCMsg(String messgage, String groupName) throws XMPPException {  
  74.         Message m = new Message();  
  75.         m.setBody(messgage);// 设置消息。  
  76.         m.setTo(groupName + "@xmpp");// [groupname]@[serviceName].[serverName]  
  77.         connection.sendPacket(m);  
  78.     }  
  79.   
  80.     /** 
  81.      * 发送即使消息 
  82.      * @param username 
  83.      * @param pass 
  84.      * @param messgage 
  85.      * @throws XMPPException 
  86.      */  
  87.     public static void SendMsg(String messgage) throws XMPPException {  
  88.         Chat mychat = connection.getChatManager().createChat("admin@xmpp"// 接收端的JID,JID是要加域的  
  89.                 new MessageListener() {  
  90.                     @Override  
  91.                     public void processMessage(Chat chat, Message message) {  
  92.                         String messageBody = message.getBody();  
  93.                         System.out.println("收到信息:" + messageBody + " " + message.getFrom());  
  94.                     }  
  95.                 });  
  96.         mychat.sendMessage(messgage); // 发送信息  
  97.     }  
  98.   
  99.     /**  
  100.      * 获取好友列表  
  101.      *   
  102.      * @param username  
  103.      * @param pass  
  104.      * @return  
  105.      * @throws XMPPException  
  106.      */    
  107.     public static List<RosterEntry> getRosterList()    
  108.             throws XMPPException {    
  109.         Collection<RosterEntry> rosters = connection.getRoster().getEntries();    
  110.         for (RosterEntry rosterEntry : rosters) {    
  111.             System.out.print("name: " + rosterEntry.getName() + ",jid: "    
  112.                     + rosterEntry.getUser()); // 此处可获取用户JID    
  113.             System.out.println();    
  114.         }    
  115.         return null;    
  116.     }    
  117.       
  118.     /**  
  119.      * 获取用户列表(含组信息)  
  120.      *   
  121.      * @param username  
  122.      * @param pass  
  123.      * @return  
  124.      * @throws XMPPException  
  125.      */    
  126.     public static List<RosterEntry> getRoster()    
  127.             throws XMPPException {    
  128.         Roster roster = connection.getRoster();    
  129.         List<RosterEntry> EntriesList = new ArrayList<RosterEntry>();    
  130.         Collection<RosterEntry> rosterEntry = roster.getEntries();    
  131.         Iterator<RosterEntry> i = rosterEntry.iterator();    
  132.         while (i.hasNext()) {    
  133.             EntriesList.add(i.next());    
  134.         }    
  135.         return EntriesList;    
  136.     }    
  137. }  
其他功能api参考:

1.smack开发文档

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

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


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:334497次
    • 积分:4555
    • 等级:
    • 排名:第6454名
    • 原创:49篇
    • 转载:474篇
    • 译文:0篇
    • 评论:20条