安装Openfire

  • Openfire官网下载地址:https://igniterealtime.org/downloads/ (也是Spark客户端的下载地址)

    Openfire下载并安装后,打开系统偏好设置,底部会出现Openfire

  • 试图启动openfire,终端命令:
cd /usr/local/openfire/bin
./openfire.sh

出现报错信息:openfire Error: JAVA_HOME is not defined correctly. /System/Library/Frameworks/JavaVM.framework/Home

Openfire默认提供的路径是错误的,百度一下,说是要修改java_home路径,有两种方法解决:

方法一:修改/usr/local/openfire/bin/openfire.sh中JAVA_HOME的路径

方法二:系统全局声明JAVA_HOME的路径

  • 查看JDK安装路径,终端命令:
/usr/libexec/java_home -V



以上电脑安装有2个JVM(JDK中包含了JRE,JRE中包含了JVM),简单说明:

/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home是系统自带的JRE路径
/Library/Java/JavaVirtualMachines/jdk1.8.0_40.jdk/Contents/Home是JDK路径
最底下的/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home表示当前系统默认使用自带的JRE路径

即当前JAVA_HOME的路径为/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home,为此我们需要切换到jdk 1.8.0_40版本的路径:/Library/Java/JavaVirtualMachines/jdk1.8.0_40.jdk/Contents/Home。

  • 方法一:修改/usr/local/openfire/bin/openfire.sh文件中JAVA_HOME的路径

    由于openfire.sh文件是只读权限,需要给它赋予读写权限才能进行写入操作。一般来说给openfire.sh文件和其父文件夹bin赋予读写权限就能编辑openfire.sh文件,但后面执行openfire.sh脚本时发现,脚本需在/usr/local/openfire文件夹中创建一些文件夹及文件,如果权限不足会导致出现报错信息,为了避免这种情况,我们直接遍历/usr/local/openfire文件夹,给子目录和子文件都赋予读写权限,终端命令:
//-R表示遍历文件夹的子文件或子文件夹
sudo chmod -R 777 /usr/local/openfire

打开openfire.sh,在"Darwin*) darwin=true"下面第二行的位置替换"JAVA_HOME="后面的内容为/Library/Java/JavaVirtualMachines/jdk1.8.0_40.jdk/Contents/Home,如下:

  • 方法二:系统全局声明JAVA_HOME的路径(推荐)

    cd ~/.bash_profile,编辑.bash_profile文件,添加如下内容
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_40.jdk/Contents/Home
PATH=$JAVA_HOME/bin:$PATH
export PATH

然后让配置立即生效,终端命令:

source ~/.bash_profile
  • 启动openfire(前提必须保证/usr/local/openfire子目录和子文件有读写权限),终端命令:
cd /usr/local/openfire/bin
./openfire.sh

以上启动openfire后,默认会去监听9090端口。由于openfire没有提供关闭服务器的脚本,如果需要关闭openfire,可以用杀死进程的方式间接关闭openfire,具体做法:

sudo lsof -i:9090    //查看端口号所在的进程信息(PID是进程号)
kill -9 PID //杀掉指定进程PID,释放被占用的端口号

以上必须用kill -9。这里对kill的用法做个科普:

kill命令默认的信号是15,也就是kill -15,是优雅的退出。当使用kill -15时,系统会发送一个SIGTERM的信号给对应的程序,通知其进行“安全、干净的退出”。当程序接收到SIGTERM信号后,退出前一般会进行一些"准备工作",如资源释放、临时文件清理等。准备工作做完了,再进行程序的终止,但如果在"准备工作"进行过程中,遇到阻塞或者其他问题导致无法成功,那么程序可以选择忽略该终止信号。这就是为何有时kill命令没法杀死应用程序的原因,因为SIGTERM(15)信号是可以被阻塞和忽略的。

像很多java程序,发送kill命令,程序不会立即退出,通常要等个几十秒之后才会退出。这时我们可以使用kill -9强制杀死的命令,系统会发出SIGKILL信号,程序接收到该信号后立即退出,不能被阻塞或者忽略。

注意:后来发现./openfire.sh开启openfire后台服务器后,是可以用快捷键control+C关闭的。

  • 进入系统偏好设置->Openfire,查看Openfire的开启状态。如果没开启就点击Start Openfire,在绿色Running时,点击Open Admin Console,自动进入浏览器打开Openfire的后台服务器http://localhost:9090

配置Openfire后台服务器

  • 语言选择:中文,点下一步。

    服务器设置:域(即服务器名称,用户JID会显示该值)填写192.168.2.2,Server Host Name(主机名,用于登录)填写127.0.0.1,端口按默认9090,点下一步。

    数据库设置选择:嵌入的数据库(Openfire自带数据库,不需要外部数据库),点下一步。

    配置文件设置选择:默认设置,点下一步。

    管理员账户:管理员电子邮箱按默认,密码填写123456,点下一步完成配置。



    之后点击“登录到管理界面”,输入账号admin,密码123456,进入Openfire后台管理。
  • 创建用户。点击用户/用户群->新建用户,依次创建用户名hong、ming、wang,密码统一设置为123456,方便记。



    之后就可以用Spark客户端(在Openfire官网上有得下载),登录用户账号,添加好友进行交流了。

卸载Openfire

  • 卸载Openfire的终端命令:
sudo rm -rf /usr/local/openfire
sudo rm -rf /Library/PreferencePanes/Openfire.prefPane
sudo rm -rf /Library/LaunchDaemons/org.jivesoftware.openfire.plist

iOS实现XMPP通讯(一)搭建Openfire的更多相关文章

  1. iOS实现XMPP通讯(二)XMPP编程

    项目概述 这是一个可以登录jabber账号,获取好友列表,并且能与好友进行聊天的项目. 使用的是第三方库XMPPFramework框架来实现XMPP通讯. 项目地址:XMPP-Project 项目准备 ...

  2. iOS基于XMPP实现即时通讯之一、环境的搭建

    移动端访问不佳,请访问我的个人博客 使用XMPP已经有一段时间了,但是一直都没深入研究过,只是使用SDK做一些简单的操作,看了许多大神的博客,自己总结一下,准备写一系列关于XMPP的使用博客,以便于自 ...

  3. iOS,XMPP本地环境搭建和框架使用

    1.XMPP的MySQL和openfire环境配置 2.XmppFramework框架导入和介绍 XMPP的MySQL和openfire环境配置 1.下载mysql安装 mysql下载 打开MySQL ...

  4. iOS - IM 即时通讯

    1.即时通讯技术 即时通讯(IM:Instant Messaging):又称实时通讯,支持用户在线实时交谈,允许两人或多人使用网络实时的传递文字消息.文件.语音与视频交流. 即时通讯在开发中使用的场景 ...

  5. 客户端技术的一点思考(数据存储用SQLite, XMPP通讯用Gloox, Web交互用LibCurl, 数据打包用Protocol Buffer, socket通讯用boost asio)

    今天看到CSDN上这么一篇< 彻底放弃没落的MFC,对新人的忠告!>, 作为一个一直在Windows上搞客户端开发的C++程序员,几年前也有过类似的隐忧(参见 落伍的感觉), 现在却有一些 ...

  6. (转)基于即时通信和LBS技术的位置感知服务(三):搭建Openfire服务器+测试2款IM客户端

    主要包含4个章节: 1. Java 领域的即时通信的解决方案 2. 搭建 Openfire 服务器 3. 使用客户端测试我们搭建的 Openfire 服务器 4. Smack 和 ASmack 一.J ...

  7. iOS中XMPP简单聊天实现 好友和聊天

    版权声明本文由陈怀哲首发自简书:http://www.jianshu.com/users/9f2e536b78fd/latest_articles;微信公众号:陈怀哲(chenhuaizhe2016) ...

  8. XMPP通讯开发-好友获取界面设计

    在XMPP通讯开发-服务器连接 中我们成功连接到服务器上面,然后进入到主界面,接下来就是获取好友列表,这里我们分段开发,首先就是界面的设计,这里仿照QQ好友界面,里面的数据先是用模拟的,下一章获取服务 ...

  9. XMPP通讯开发-服务器好友获取以及监听状态变化

    在 XMPP通讯开发-好友获取界面设计   我们设计了放QQ的列表功能,这里我们获取我们服务器上的 数据. 这一部分知识我们可以查看smack_3_3_0/smack_3_3_0/documentat ...

随机推荐

  1. 复习git

    git 常用点,详解 from my typora 文章目录 git 常用点,详解 git 模式解析 删除文件 方式一: 方式二: 远程库 配置忽略文件 查看版本库日志,以及版本回退 解决冲突 替换我 ...

  2. IDEA 创建Maven Web工程

    一.Maven环境搭建 二.Maven常用命令 mvn clean 清除生成的target文件 mvn install 生成target文件 mvn clean install 相当于先删除targe ...

  3. Nginx对代理HTTP资源的限制访问

    为了限制连接的数量,首先,使用指令来定义密钥并设置共享内存区域的参数(工作进程将使用该区域来共享键值的计数器).作为第一个参数,指定作为关键字计算的表达式.在第二个参数区域中,指定区域的名称及其大小. ...

  4. 微信小程序基础知识笔记

    微信小程序笔记 文件构成 全局文件 app.json 小程序全局配置文件,必要,自动生成 app.js 小程序入口JS文件,一般只需申明全局变量.处理生命周期以及版本升级即可,必要 app.wxss ...

  5. WebService学习总结(六)--CXF 与Spring结合+tomcat发布

    该项目在上文   WebService学习总结(四)--基于CXF的服务端开发  的基础上修改为spring上发布的webservice接口 1.新建web project 工程 2.导入spring ...

  6. 基本ServletWEB项目

    项目搭建 项目链接https://gitee.com/zhangjzm/smbms.git 前置知识,Servlet JSP 结构图 搭建maven web项目 1.搭建一个maven web项目 2 ...

  7. Gitlab - 安装的社区版 Gitlab-ce,解决访问网页报502-Whoops, GitLab is taking too much time to respond的问题

    问题背景 在自己虚拟机(centos7)上装了 Gitlab-ce,就是社区版的 Gitlab,版本是 13.0+ 问题描述 浏览器访问 Gitlab 网站,报 502 问题翻译 502-Whoops ...

  8. tornado2.2安装教程

    最近要用到vxworks 系统,所以避免不了要安装tornado 软件,进行相关的开发. 自己在安装过程中遇到了点点问题,这里记录下来,免得以后再次安装时遇到同样的问题. 1.   首先提供一个tor ...

  9. J2EE分布式微服务云开发架构 Spring Cloud+Mybatis+ElementUI 前后端分离J2EE分布式微服务云开发架构 Spring Cloud+Mybatis+ElementUI 前后端分离

    ​ 鸿鹄云架构[系统管理平台]是一个大型企业.分布式.微服务.云架构的JavaEE体系快速研发平台,基于模块化.微服务化.原子化.热部署的设计思想,使用成熟领先的无商业限制的主流开源技术(Spring ...

  10. go中如果想要实现别人写的接口,如何保证确实实现了那个接口而不是错过了什么?

    在类型的实现方法上定义通用代码指令 var _ 要实现的接口  = (receiver类型)(nil) 比如要定义一个web处理程序 type  handler_def struct{} var _ ...