xmpp协议,openfire使用

目录

XMPP协议背景:

openfire服务端

插件开发

Spark Smack客户端


XMPP协议背景:

即时通信( Instant Messaging,简称 IM)  像qq.微信

没有统一的标准,无法实现互联互通,  用统一的协议XMPP

 XMPP 协议是以 XML 为基础的 ,XMPP 信息不仅可以是简单的文本,而且可以携带复杂的数据和各种格式的文件,

也就是说 XMPP 协议不仅可以用在人与人之间的交流,而且可以实现软件与软件或软件与人之间的交流

XMPP 中定义了三个角色, 客户端,服务器,网关


openfire服务端

Openfire 是基于XMPP 协议的IM 的服务器端的一个实现

参考 http://myopenfire.com/article/articledir/1

Openfire是一个Java应用程序, 

 Openfire采用内置的jetty作web服务器,在启动AdminConsolePlugin插件时调用startup()方法启动jetty服务器,9090为其明文端口,9091为其加密端口。 启动成功后, 可以从网站进入http://ip:9090 openfire管理控制台

设置服务端端口,客户端连接设置,策略设置,离线消息的存储

 

openfire需要用到数据库:

ofGroup (用户组的数据)

ofGroupUser (组成员)

ofUser (用户数据)

ofOffline (离线邮件存储)

 

 

插件开发

下载源码,生成eclipse项目,添加项目依赖的Jar包,运行openfire

 


Spark Smack客户端

Smack 是一个XMPP 协议的Java 实现,提供一套可扩展的API

Spark 提供了客户端一个基本的实现,并提出了一个很好的插件架构

例: java客户端发送消息

package com.openfire.client;

import java.io.IOException;
import java.util.Scanner;

import org.jivesoftware.smack.AbstractXMPPConnection;
import org.jivesoftware.smack.StanzaListener;
import org.jivesoftware.smack.XMPPException;
import org.jivesoftware.smack.chat.Chat;
import org.jivesoftware.smack.chat.ChatManager;
import org.jivesoftware.smack.chat.ChatManagerListener;
import org.jivesoftware.smack.chat.ChatMessageListener;
import org.jivesoftware.smack.ConnectionConfiguration.SecurityMode;
import org.jivesoftware.smack.SmackException;
import org.jivesoftware.smack.SmackException.NotConnectedException;
import org.jivesoftware.smack.filter.StanzaFilter;
import org.jivesoftware.smack.packet.Message;
import org.jivesoftware.smack.packet.Stanza;
import org.jivesoftware.smack.tcp.XMPPTCPConnection;
import org.jivesoftware.smack.tcp.XMPPTCPConnectionConfiguration;

/**
 * Hello XMPP!
 *
 */
public class App extends Thread 
{
    void say() {
    };
    
    public static void main( String[] args ) throws SmackException, IOException, XMPPException, InterruptedException
    {
            // 对连接的配置
            XMPPTCPConnectionConfiguration.Builder builder = XMPPTCPConnectionConfiguration.builder();
            builder.setUsernameAndPassword("admin", "123456");
            builder.setServiceName("ww110"); //openfire服务端名字,登录管理后台可查看
            builder.setHost("192.168.0.110");
            builder.setPort(5222);
        
            // 不加这行会报错,因为没有证书
            builder.setSecurityMode(SecurityMode.disabled);
            //SASLAuthentication.supportSASLMechanism("PLAIN",0); 
            builder.setDebuggerEnabled(true);
            XMPPTCPConnectionConfiguration config = builder.build();
            
            // 建立连接并登陆
            AbstractXMPPConnection c = new XMPPTCPConnection(config);
            c.addPacketSendingListener(new StanzaListener() {
                @Override
                public void processPacket(Stanza st) throws NotConnectedException {
                    System.out.println("in StanzaListener:" + st.getFrom());
                }
            }, new StanzaFilter() {
                @Override
                public boolean accept(Stanza st) {
                    System.out.println("in StanzaFilter:" + st.getFrom());
                    return false;
                }
            });

            c.connect();
            c.login();
            
            ChatManager chatManager = ChatManager.getInstanceFor(c);
            chatManager.addChatListener(new ChatManagerListener() {
                @Override
                public void chatCreated(Chat cc, boolean bb) {
                    // 当收到来自对方的消息时触发监听函数
                    cc.addMessageListener(new ChatMessageListener() {
                        @Override
                        public void processMessage(Chat cc, Message mm) {
                            System.out.println("app2收到消息:" + cc + mm.getBody());
                        }
                    });
                }
            });

            while (true) {
                sleep(2000);
               //每2秒给new1用户发消息
                Chat chat = chatManager.createChat("new1@ww110");
                chat.getThreadID(); Message msg = new Message();
                msg.setBody("你好,我是机器人"); 
                chat.sendMessage(msg); 
            } 
    } 
}

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章