前言
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"?>Your message hello"""
send_broadcast_message(message)
smack(api客户端)使用
创建个mavn工程.
pom.xml添加
org.igniterealtime.smack
smack-java7
4.1.1
xpp3
xpp3
xpp3
xpp3
1.1.3.4.O
org.igniterealtime.smack
smack-tcp
4.1.1
org.igniterealtime.smack
smack-im
4.1.1
org.igniterealtime.smack
smack-extensions
4.1.1
java客户端发送获取消息例子
packagecom.openfire.client;importjava.io.IOException;importjava.util.Scanner;importorg.jivesoftware.smack.AbstractXMPPConnection;importorg.jivesoftware.smack.StanzaListener;importorg.jivesoftware.smack.XMPPException;importorg.jivesoftware.smack.chat.Chat;importorg.jivesoftware.smack.chat.ChatManager;importorg.jivesoftware.smack.chat.ChatManagerListener;importorg.jivesoftware.smack.chat.ChatMessageListener;importorg.jivesoftware.smack.ConnectionConfiguration.SecurityMode;importorg.jivesoftware.smack.SmackException;importorg.jivesoftware.smack.SmackException.NotConnectedException;importorg.jivesoftware.smack.filter.StanzaFilter;importorg.jivesoftware.smack.packet.Message;importorg.jivesoftware.smack.packet.Stanza;importorg.jivesoftware.smack.tcp.XMPPTCPConnection;importorg.jivesoftware.smack.tcp.XMPPTCPConnectionConfiguration;/*** Hello world!
**/
public class App extendsThread
{voidsay() {
};public static void main( String[] args ) throwsSmackException, 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 = newXMPPTCPConnection(config);
c.addPacketSendingListener(newStanzaListener() {
@Overridepublic void processPacket(Stanza st) throwsNotConnectedException {
System.out.println("in StanzaListener:" +st.getFrom());
}
},newStanzaFilter() {
@Overridepublic booleanaccept(Stanza st) {
System.out.println("in StanzaFilter:" +st.getFrom());return false;
}
});
c.connect();
c.login();
ChatManager chatManager=ChatManager.getInstanceFor(c);
chatManager.addChatListener(newChatManagerListener() {
@Overridepublic void chatCreated(Chat cc, booleanbb) {//当收到来自对方的消息时触发监听函数
cc.addMessageListener(newChatMessageListener() {
@Overridepublic voidprocessMessage(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= newMessage();
msg.setBody("kkkkkkkkkkkkkkkkkkkkk33333333333333333333333333333333333");
chat.sendMessage(msg); } } }
总结:
openfire只研究到这,暂时写到这。