java应用之openfire入门篇

前言

openfire是一个聊天服务端,好比qq服务端.本质是个socker server.

openfire通讯协议是 xmpp  ,什么是xmpp参考百科 https://baike.baidu.com/item/XMPP/3430617?fr=aladdin

openfire项目三部分

1.服务端   --->  2.桌面版客户端spark  ---> 3.smack(api客户端)

1.服务端结构

a.plugins(插件):

1.官方提供的插件

2.自己开发插件

功能概述:比如注册用户。

b.web版的管理端

2.桌面版客户端spark

a.类似QQ客户端,还没用

3.smack(api客户端)

a.api库,程序员都懂.

安装篇

下载 openfire-4.1.5-1.noarch.rpm,jdk环境1.8

#安装

rpm -ivh openfire-4.1.5-1.noarch.rpm

#启动

systemctl restart openfire

#浏览器打开

http://ip:9090

官方rest api插件使用

#安装rest api

REST API插件可以后台添加用户等等,详细查看文档

python调用例子:

#coding=utf-8
import requests
import json

tou1 = {"Authorization": "pymxG12RQQDj2vFY","Accept": "application/json"}

tou2 = {"Authorization": "pymxG12RQQDj2vFY","Content-Type": "application/json"}

tou3 = {"Authorization": "pymxG12RQQDj2vFY","Content-Type": "application/xml"}

def serach_user(user):
    url = "http://192.168.0.110:9090/plugins/restapi/v1/users?search={user}".format(user=user)
    r1 = requests.get(url,headers=tou1)

    print r1.text

def create_user(user):
    url = "http://192.168.0.110:9090/plugins/restapi/v1/users"
    r1 = requests.post(url, headers=tou2,data=user)
    print r1.text
    print r1.status_code

def send_broadcast_message(message):
    url = "http://192.168.0.110:9090/plugins/restapi/v1/messages/users"
    r1 = requests.post(url, headers=tou3,data=message)
    print r1.status_code
if __name__ == ‘__main__‘:
    # c_user1 ={"username": "new1", "password": "p4ssword"}
    # c_user1 = json.dumps(c_user1)
    # create_user(c_user1)
    message = """<?xml version="1.0" encoding="UTF-8" standalone="yes"?><message><body>Your message hello</body></message>"""
    send_broadcast_message(message)

smack(api客户端)使用

创建个mavn工程.

pom.xml添加

 <dependency><groupId>org.igniterealtime.smack</groupId>
                <artifactId>smack-java7</artifactId>
                <version>4.1.1</version>
                <exclusions>
                    <exclusion>
                        <groupId>xpp3</groupId>
                        <artifactId>xpp3</artifactId>
                    </exclusion>
                </exclusions>
        </dependency>
        <dependency>
            <groupId>xpp3</groupId>
            <artifactId>xpp3</artifactId>
            <version>1.1.3.4.O</version>
        </dependency>
        <dependency>
                <groupId>org.igniterealtime.smack</groupId>
                <artifactId>smack-tcp</artifactId>
                <version>4.1.1</version>
        </dependency>
        <dependency>
                <groupId>org.igniterealtime.smack</groupId>
                <artifactId>smack-im</artifactId>
                <version>4.1.1</version>
        </dependency>
        <dependency>
                <groupId>org.igniterealtime.smack</groupId>
                <artifactId>smack-extensions</artifactId>
                <version>4.1.1</version>
        </dependency>

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 world!
 *
 */
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");
                chat.getThreadID();

                Message msg = new Message();

                  msg.setBody("kkkkkkkkkkkkkkkkkkkkk33333333333333333333333333333333333");
                  chat.sendMessage(msg);

            }

    }
}

总结:

openfire只研究到这,暂时写到这。

  

时间: 2024-10-18 03:56:33

java应用之openfire入门篇的相关文章

白盒测试(Java) - (Junit入门篇一)

公司开发程序员有很多美女,然后咱也不甘落后.就研究了一下Junit,属于刚刚接触,就做了一下笔记分享.仅合适小白篇,已经入门的可忽略 一.需要的工具: 1.有eclipse 4.3  64位(或是其他的Java开发工具),下载路径:http://pan.baidu.com/s/1qYLVumo: 2.安装好JDK,我安装的是1.8版本,配置好环境(网盘没给共享,自己到官网下载): 3.有junit4.12的jar包,下载地址为:http://pan.baidu.com/s/1i548ACP: 二

java应用之solr入门篇

前言 solr是apache项目的一款全文搜索应用. 官方文档http://lucene.apache.org/solr/guide/6_6/ 入门流程 1.安装   --->  2.启动  --->  3.创建核心  ---> 4.添加文档   ---> 5.url接口查询 1.安装 下载solr-6.6.0.tgz包,解压任意目录 2.启动 /opt/solr-6.6.0/bin ./solr start -force #root用户需要加force 3.创建核心 #创建索引数

Java工程师学习指南(入门篇)

Java工程师学习指南 入门篇 最近有很多小伙伴来问我,Java小白如何入门,如何安排学习路线,每一步应该怎么走比较好.原本我以为之前的几篇文章已经可以解决大家的问题了,其实不然,因为我之前写的文章都是站在Java后端的全局上进行思考和总结的,忽略了很多小白们的感受,而很多朋友都需要更加基础,更加详细的学习路线. 所以,今天我们重新开一个新的专题,分别按照四篇文章讲述Java的学习路线(分别是入门篇,初级篇,中级篇,高级篇),笔者也打算趁此机会,回忆一下自己的Java学习历程.今天我们要讲的是,

热烈庆祝【深入浅出Java虚拟机——入门篇】培训课程在51CTO上线了

我的视频[深入浅出Java虚拟机--入门篇]在51CTO学院上线了. 想了解的可以点击: http://edu.51cto.com/course/course_id-1952.html 课程框架如下: 1.jvm概述 2.java规范和JVM规范简述 3.生活中的数字在计算机中的表示 4.jvm内存划分 5.jvm内存模型 6.jvm调试跟踪参数 7.jvm内存控制上 8.jvm内存控制下 9.jvm中class的装载过程 10.jvm中classloader的设计模式 11.jvm中有关cla

《Java从入门到放弃》入门篇:springMVC数据校验

昨天我们扯完了数据传递,今天我们来聊聊数据校验的问题.来,跟着我一起读:计一噢叫,一按艳. 在springMVC中校验数据也非常简单,spring3.0拥有自己独立的数据校验框架,同时支持JSR303标准的校验框架. Spring的DataBinder在进行数据绑定时,会同时调用校验框架完成数据校验工作. 具体使用步骤如下: 1)导入数据校验的JAR包 2)在springmvc的配置文件中添加校验Bean 3)修改实体类,在属性上加上校验的注解 4)修改昨天的login4方法,加上校验的相关代码

《Java从入门到放弃》入门篇:hibernate中的多表对应关系

hibernate中的对应关系其实就是数据库中表的对应关系, 就跟某些电影中的某些场景是一样一样滴. 比如可以是一男一女,还可以是一男多女, 更可以是多男一女,最后最后最后还可以是多男多女!!! 有些不纯洁的看官肯定已经开始想歪了吧···,我还是上图吧!请看下图 我说滴是这样滴一群人打群架滴场景,嘿嘿嘿··· 好吧,进入正题!!! 数据库中表与表之间的数据映射关系有一对一,一对多,多对一,多对多.例如: 一个身份证只能对应一个护照,一个护照也只能对应一个身份证,这就是一对一的关系 一个男人可以有

《Java从入门到放弃》入门篇:Struts2的常用验证方式(二)

前一回,我们讲完了"直接在功能方法中写验证代码"这种验证方式,接下来,我们继续搞定后续的三种方式. 二.重写validate方法(注意这个方法会验证该类中所有的方法) 使用重写验证方法的好处就是,又可以少写一句代码了!!!! 2.1)修改Action类,在其中添加valiate方法,把之前写在add方法中的验证代码剪切过来     //修改后的add方法     public String add() {         System.out.println("调用了添加的方

Java 集合类入门篇

开门见山地说吧,Java 提供了一套完整的集合类(也可以叫做容器类)来管理一组长度可变的对象(也就是集合的元素),其中常见的类型包括 List.Set.Queue 和 Map.从我个人的编程经验来看,List 的实现类 ArrayList 和 Map 的实现类 HashMap 使用频率最高,其它实现类只能望其项背了. <!--more--> List.Set 和 Queue 都是 Collection 的子接口,但各有各的好.List 按照插入的顺序保存元素,Set 不会有重复的元素,Queu

漫游Kafka入门篇之简单介绍

原文地址:http://blog.csdn.net/honglei915/article/details/37564521 介绍 Kafka是一个分布式的.可分区的.可复制的消息系统.它提供了普通消息系统的功能,但具有自己独特的设计.这个独特的设计是什么样的呢? 首先让我们看几个基本的消息系统术语: Kafka将消息以topic为单位进行归纳. 将向Kafka topic发布消息的程序成为producers. 将预订topics并消费消息的程序成为consumer. Kafka以集群的方式运行,