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只研究到这,暂时写到这。
java应用之openfire入门篇的更多相关文章
- Java工程师学习指南 入门篇
Java工程师学习指南 入门篇 最近有很多小伙伴来问我,Java小白如何入门,如何安排学习路线,每一步应该怎么走比较好.原本我以为之前的几篇文章已经可以解决大家的问题了,其实不然,因为我之前写的文章都 ...
- 《java第一季之入门篇》的想法
学习java也有一段时间了,但是考虑到自己现在上课.复习.考试等耗费很多时间,感觉没有静下心来的时间去写一个长期的博客.计划今年7月1号开始写一套关于java的入门篇博客文章,入门篇计划这样--涵盖j ...
- java应用之solr入门篇
前言 solr是apache项目的一款全文搜索应用. 官方文档http://lucene.apache.org/solr/guide/6_6/ 入门流程 1.安装 ---> 2.启动 - ...
- Java工程师学习指南(入门篇)
Java工程师学习指南 入门篇 最近有很多小伙伴来问我,Java小白如何入门,如何安排学习路线,每一步应该怎么走比较好.原本我以为之前的几篇文章已经可以解决大家的问题了,其实不然,因为我之前写的文章都 ...
- Java入门篇(六)——类和对象
写到这里终于写到了入门篇的最后一个知识点了.类和对象是Java中经常被提到的两个词汇,实际上可以将类看作对象的载体,它定义了对象所具有的功能.Java是面向对象的语言,因此掌握类与对象是学习Java语 ...
- Java基础-SSM之Spring MVC入门篇
Java基础-SSM之Spring MVC入门篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Spring MVC简介 1>.什么是Spring MVC 答:Sprin ...
- Java基础-SSM之Spring快速入门篇
Java基础-SSM之Spring快速入门篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java ...
- Java基础-SSM之mybatis快速入门篇
Java基础-SSM之mybatis快速入门篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 其实你可能会问什么是SSM,简单的说就是spring mvc + Spring + m ...
- (转载)从Java角度理解Angular之入门篇:npm, yarn, Angular CLI
本系列从Java程序员的角度,带大家理解前端Angular框架. 本文是入门篇.笔者认为亲自动手写代码做实验,是最有效最扎实的学习途径,而搭建开发环境是学习一门新技术最需要先学会的技能,是入门的前提. ...
随机推荐
- STM32 通用定时器好文章收藏
https://blog.csdn.net/fengshuiyue/article/details/79150724 单片机入门学习十三 STM32单片机学习十 通用定时器 里面写的挺不错,图文并茂, ...
- 磁盘I/O工作原理
原创转载请注明出处:https://www.cnblogs.com/agilestyle/p/11524947.html TODO Reference https://time.geekbang.or ...
- ES5和ES6数组方法
ES5 方法 indexOf和lastIndexOf 都接受两个参数:查找的值.查找起始位置不存在,返回 -1 :存在,返回位置.indexOf 是从前往后查找, lastIndexOf 是从后往前查 ...
- css----overflow(布局)
CSS overflow 属性用于控制内容溢出元素框时显示的方式. CSS Overflow CSS overflow 属性可以控制内容溢出元素框时在对应的元素区间内添加滚动条. overflow属性 ...
- SQL注入的简单认识
写在前面 MYSQL5.0之后的版本,默认在数据库中存放一个information_schema的数据库,其中应该记住里面的三个表SCHEMATA.TABLES.COLUMNS SCHEMATA表:存 ...
- BUUCTF | [SUCTF 2019]EasySQL (堆叠注入)
fuzz ing了一下,发现了一堆过滤: 同时发现了注入点,这个应该是var_dump()函数 ===============第二天的分割线 好吧我放弃了,找了一下wp 正确解:select 1;se ...
- [CSP-S模拟测试]:Lost My Music(凸包)
题目描述 小$w$在天堂看到了一棵世界树.世界树上有$n$个节点,其中$1$节点为根,每个节点有一个正整数权值$c_i$.现在小$w$想要对每个节点$u$求出它的祖先$v$中$\frac{c_v-c_ ...
- 8051 r0-r7 是什么
R0~R7表示当前选中的寄存器组的寄存器0~7,5I机有p0,p1,p2,p3口,每组有八个寄存器(R0-R7),比如MOV A Rn (n=0~7),表示把寄存器Rn 的内容送给累加器A,其中源操作 ...
- selenium2-java 浏览器操作常用命令语法
WebDriver driver = new ChromeDriver(); xpath定位:driver.findElement(By.xpath("//div[@id='register ...
- sql server中实现mysql的find_in_set函数和group_concat类似功能的讲解
charindex(',' + ' test '+ ',' , ',' + test2+ ',')>0 灵活运用 SQL SERVER FOR XML PATH FOR XML ...