当前位置:   article > 正文

Linux安装Openfire、Spark_openfire spark

openfire spark

一、安装Openfire

  1. 首先要安装好JDK,安装教程:https://blog.csdn.net/android_cai_niao/article/details/113858663

  2. 安装Openfire,参照JDK的安装即可。

  3. 设置环境变量

    #openfire
    export OPENFIRE_HOME=/usr/local/openfire
    export PATH=.:${OPENFIRE_HOME}/bin:$PATH
    
    • 1
    • 2
    • 3

    使环境变量立即生效:

    source /etc/profile
    
    • 1
  4. 启动Openfire,在任意位置输入命令:openfire start,如下图:
    在这里插入图片描述

  5. 停止Openfire,在任意位置输入命令:openfire stop,如下图:
    在这里插入图片描述

  6. 测试Openfire安装,启动Openfire之后,在浏览器上输入:linux ip:9090/,如果能输出一个配置界面,则安装成功!

二、安装Spark

  1. 首先要安装好JDK,安装教程:https://blog.csdn.net/android_cai_niao/article/details/113858663

  2. 安装Spark,参照JDK的安装即可。

  3. 启动Spark
    假设Spark安装在:/usr/local/Spark目录下,则cmd先进入到该目录下:

    cd /usr/local/Spark
    
    • 1
  • 然后有以下几种方式可以启动Spark,输入命令:

    • Spark
    • .Spark
    • ./Spark
    • bash Spark
    • sh Spark
    • 快捷方式:在资源管理器中进入到Spark安装目录,右击Spark,选择“链接到桌面”,然后双击桌面图标,并选择“直接运行”即可,截图如下:
      在这里插入图片描述
      在这里插入图片描述
      缺点是每次双击后都要选择“直接运行”有点麻烦,不知道有没有解决方案。

后来,我安装了正规的Ubuntu桌面系统(即Ubuntu官网下载的),安装流程是一样的,安装好之后,使用Xshell连接虚拟机,然后创建Spark.sh脚本文件(可直接复制命令),如下:

vim /home/even/桌面/Spark.sh
  • 1

按字母i进入编辑模式,然后复制下面的内容粘贴进去:

#!/bin/bash
/usr/local/Spark/Spark
  • 1
  • 2

然后按ESC键,然后再按:wq 来保存并退出编辑。

然后右击该文件,选择“属性” > “权限”,勾选"允许执行文件(E)",如下:
在这里插入图片描述
执行完这一步,在我安装的Linux上双击Spark.sh就能运行了。不需要进行其他设置了,而网上有介绍进行下面的设置,所以如果大家双击不能运行的话也可以试试:

随便打开一个文件夹,然后选择“首选项”菜单,如下:
在这里插入图片描述
在这里插入图片描述
在“可执行文本文件”的地方选择“运行”。

三、重装Openfire

重装,经测试,直接删除openfire目录后访问linux ip:9090依然是可以,说明程序加载进入了内存,所以在删除之前,先执行openfire stop命令之后再删除,然后重新解压openfire来实现重新安装。具体步骤如下:

  1. 停止openfire:openfire stop
  2. 进入到openfire安装目录:cd /usr/local
  3. 删除openfire:rm -rf openfire
  4. 重装openfire:tar -zxvf openfire_4_6_3.tar.gz (前期就把这个压缩文件放到/usr/local目录下,方便重装)
  5. 启动openfire:openfire start

四、Windows版Spark

在这里插入图片描述
这里有两个版本,spark_2_9_4-with-jre.exe是包含有jre环境,下载这个即可,因为这个直接安装就可以使用了,即使你没安装jdk。而spark_2_9_4.exe是需要自己安装jdk的,而且他需要的是32位的jdk。

五、配置Openfire使用MySQL数据库

在这里插入图片描述
如上图,在配置数据库设置的时候,选择“标准数据库连接”,然后进入下一步,如下:
在这里插入图片描述
数据库驱动选项选择MySQL,JDBC驱动程序类保持默认即可,而数据库URL是需要修改的,默认的URL如下:

jdbc:mysql://HOSTNAME:3306/DATABASENAME?rewriteBatchedStatements=true&characterEncoding=UTF-8&characterSetResults=UTF-8&serverTimezone=UTC

HOSTNAME为MySQL所在服务器地址,因为Openfire和MySQL是安装在同一台Linux系统里,所以可以使用localhost来表示服务器地址,DATABASENAME为数据库名,所以,需要提前在MySQL中创建一个数据库供openfire使用。?这个问号后面的是连接数据库时的一些参数,rewriteBatchedStatements保持不变,具体作用可百度,而characterEncoding、characterSetResults和serverTimezone应该根据实际情况进行修改。

在MySQL数据库中创建一个数据库用于保存Openfire的数据:

create database openfire;
  • 1

然后查看数据库的编码:

show create database openfire;
  • 1

截图如下:
在这里插入图片描述
可以看到,CHARACTER SET为utf8mb4。

查看character_set_results:

show variables like '%char%';
  • 1

在这里插入图片描述
可看到,character_set_results为utf8mb4。

查看Linux系统的时区:

timedatectl | grep "Time zone"
  • 1

截图如下:
在这里插入图片描述
可以看到,时区用的是CST。

根据以上信息,再根据Openfire的MySQL数据库连接模板,得到数据库连接URL为:
jdbc:mysql://localhost:3306/openfire?rewriteBatchedStatements=true&characterEncoding=utf8mb4&characterSetResults=utf8mb4&serverTimezone=CST

但是设置后点击继续会报错,如下:
在这里插入图片描述
提示说在/logs/error.log保存了异常信息,但是在openfire的安装目录下的logs目录中并没有找到error.log文件。

后来把URL中删掉参数就可以连接上了:jdbc:mysql://localhost:3306/openfire

这说明是因为有些参数这个配置程序不识别,经过排查,发现它不识别utf8mb4编码,改成utf-8即可,如下:
jdbc:mysql://localhost:3306/openfire?rewriteBatchedStatements=true&characterEncoding=UTF-8&characterSetResults=UTF-8&serverTimezone=CST

使用了MySQL数据库之后,当我们重装Openfire时,创建的用户数据就不会因为重装而丢失了,只要是配置使用的同一个MySQL数据库,重装后之前的用户数据自动会加载进来的,不需要特殊处理。注:给用户设置的头像在重装后会丢失,说明头像图片没有保存在MySQL数据库。

六、Bug

Bug 一 不发消息就收不到消息

之前在官网论坛问过,没人回答 ,地址:https://discourse.igniterealtime.org/t/dont-receive-the-message-on-androids-smack/86556

使用的smack版本为:

implementation 'org.igniterealtime.smack:smack-android-extensions:4.3.4'
implementation 'org.igniterealtime.smack:smack-tcp:4.3.4'
  • 1
  • 2

代码如下:

val config = XMPPTCPConnectionConfiguration.builder()
    .setUsernameAndPassword("lily", "123456")
    .setXmppDomain("192.168.1.40")
    .setHostAddress(InetAddress.getByName("192.168.1.40"))
    .setPort(5222)
    .setSecurityMode(ConnectionConfiguration.SecurityMode.disabled)
    .enableDefaultDebugger()
    .build()

val conn = XMPPTCPConnection(config)
conn.connect()
conn.login()

val chatManager = ChatManager.getInstanceFor(conn)
chatManager.addIncomingListener { _, message, chat -> chat.send(message.body) }

// send message
// val jid = JidCreate.entityBareFrom("dzl@dazhou.cn")
// val chat = chatManager.chatWith(jid)
// chat.send("Hello world!")
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

代码很简,登录之后注册了一个监听器,用于监听收到的消息,使用Spark向我的Android程序发送消息,收不到,但是把上面代码的注销去掉,功能为发送一个消息,然后再使用Spark向我的Android程序发送消息时就可以收到消息了,很奇怪。

Bug 二 不能修改头像

使用的Spark版本为2.9.4,Windows版本,Openfire试过4.4.0、4.6.2、4.6.3,Linux版本,安装在Ubuntu 18.04,这三个openfrie版本均有此问题,其他版本没试验过。操作步骤如下:

第一次给用户设置头像是没问题的,然后再次修改头像时程序就修改不成功了,而且Spark程序变得卡顿,修改头像会提示如下:
在这里插入图片描述
注销后再登录时就登录不上了,报如下错误:
在这里插入图片描述
在服务器上停止Spark再开启可以恢复登录,但是Spark依旧卡顿,只有卸载Openfire重装后才不卡顿,如果Openfire数据库保存在MySQL,则重装Openfire也依旧卡顿,在重装Openfire时,同时删除对应的数据库并重新创建才不会卡顿。

如果使用了MySQL数据库,当我们设置了头像,但是没有修改头像,如果卸载Openfire,则头像数据会丢失,登录Spark时也会很卡。

注:使用Windows版本的Openfire就不会有这个问题

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/503793
推荐阅读
相关标签
  

闽ICP备14008679号