• 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@ww110");
    chat.getThreadID(); Message msg
    = new Message();
    msg.setBody(
    "kkkkkkkkkkkkkkkkkkkkk33333333333333333333333333333333333");
    chat.sendMessage(msg); } } }

    总结:

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

      

  • 相关阅读:
    第十章 迭代器模式 Iterator
    第四章:使用Proxy代理让客户端服务端分工合作。
    第三章:真正弄清楚一个Mod的组织结构
    第二章:开始开发mod前你需要知道的一些事情
    第一章:在IDEA里搭建基于Forge的Minecraft mod开发环境
    Android实现真正的ViewPager【平滑过渡】+【循环滚动】!!!顺带还有【末页跳转】。
    关于坑爹的PopupWindow的“阻塞”争议问题:Android没有真正的“阻塞式”对话框
    快排-Go版本
    链表翻转(按K个一组)(Go语言)
    牛客刷题-重建二叉树(GO语言版)
  • 原文地址:https://www.cnblogs.com/whf191/p/7469545.html
Copyright © 2020-2023  润新知