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只研究到這,暫時寫到這。

 

 

 

 

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM