iOS实现XMPP通讯(一)搭建Openfire
安装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的更多相关文章
- iOS实现XMPP通讯(二)XMPP编程
项目概述 这是一个可以登录jabber账号,获取好友列表,并且能与好友进行聊天的项目. 使用的是第三方库XMPPFramework框架来实现XMPP通讯. 项目地址:XMPP-Project 项目准备 ...
- iOS基于XMPP实现即时通讯之一、环境的搭建
移动端访问不佳,请访问我的个人博客 使用XMPP已经有一段时间了,但是一直都没深入研究过,只是使用SDK做一些简单的操作,看了许多大神的博客,自己总结一下,准备写一系列关于XMPP的使用博客,以便于自 ...
- iOS,XMPP本地环境搭建和框架使用
1.XMPP的MySQL和openfire环境配置 2.XmppFramework框架导入和介绍 XMPP的MySQL和openfire环境配置 1.下载mysql安装 mysql下载 打开MySQL ...
- iOS - IM 即时通讯
1.即时通讯技术 即时通讯(IM:Instant Messaging):又称实时通讯,支持用户在线实时交谈,允许两人或多人使用网络实时的传递文字消息.文件.语音与视频交流. 即时通讯在开发中使用的场景 ...
- 客户端技术的一点思考(数据存储用SQLite, XMPP通讯用Gloox, Web交互用LibCurl, 数据打包用Protocol Buffer, socket通讯用boost asio)
今天看到CSDN上这么一篇< 彻底放弃没落的MFC,对新人的忠告!>, 作为一个一直在Windows上搞客户端开发的C++程序员,几年前也有过类似的隐忧(参见 落伍的感觉), 现在却有一些 ...
- (转)基于即时通信和LBS技术的位置感知服务(三):搭建Openfire服务器+测试2款IM客户端
主要包含4个章节: 1. Java 领域的即时通信的解决方案 2. 搭建 Openfire 服务器 3. 使用客户端测试我们搭建的 Openfire 服务器 4. Smack 和 ASmack 一.J ...
- iOS中XMPP简单聊天实现 好友和聊天
版权声明本文由陈怀哲首发自简书:http://www.jianshu.com/users/9f2e536b78fd/latest_articles;微信公众号:陈怀哲(chenhuaizhe2016) ...
- XMPP通讯开发-好友获取界面设计
在XMPP通讯开发-服务器连接 中我们成功连接到服务器上面,然后进入到主界面,接下来就是获取好友列表,这里我们分段开发,首先就是界面的设计,这里仿照QQ好友界面,里面的数据先是用模拟的,下一章获取服务 ...
- XMPP通讯开发-服务器好友获取以及监听状态变化
在 XMPP通讯开发-好友获取界面设计 我们设计了放QQ的列表功能,这里我们获取我们服务器上的 数据. 这一部分知识我们可以查看smack_3_3_0/smack_3_3_0/documentat ...
随机推荐
- 了解Flask
了解Flask 什么是Flask Flask 是一个微框架(Micro framework),所谓微框架,它就是很轻量级的,作者划分出了Flask应该负责什么(请求路由.处理请求.返回响应).不应该负 ...
- AI 常见术语总结
BN(Batch-normalization)在一层的输出上计算所有特征映射的均值和标准差,并且使用这些值规范化它们的响应.因此使得所有神经图(neural maps)在同样范围有响应,而且是零均 ...
- ubuntu apt-get Failed to fetch Temporary failure resolving 'security.ubuntu.com'
发现是因为代理设置原因,导致无法上网,设置代理后问题解决. System Setting -> Network -> Network Proxy -> input IP+Port - ...
- Python3-sqlalchemy-orm
1 #-*-coding:utf-8-*- 2 #__author__ = "logan.xu" 3 4 5 import sqlalchemy 6 from sqlalchemy ...
- 快速构建CLI程序并发布到PyPi
构造一个简单的CLI程序 typer 这个从去年就被各种营销号吹成Web框架的 第三方库, 与 FastAPI 同出一人之手,它不是Web框架,它是一个用来构建CLI程序的库,我们就简单搞个例子 # ...
- 洛谷P3104 Counting Friends G 题解
题目 [USACO14MAR]Counting Friends G 题解 这道题我们可以将 \((n+1)\) 个边依次去掉,然后分别判断去掉后是否能满足.注意到一点, \(n\) 个奶牛的朋友之和必 ...
- 动环监控系统中B接口的实现
动环监控系统简述 1.术语介绍 1.1 省集中监控中心-Province Supervision Center(PSC) 面向多FSU管理的高级监控层次,即省集中监控中心,通过开放的数据协议,连接监控 ...
- Python - 面向对象编程 - 三大特性之多态
前置知识 封装 详解文章:https://www.cnblogs.com/poloyy/p/15203989.html 封装根据职责将属性.方法封装到一个抽象的类中 定义类的准则-封装 继承 详解文章 ...
- Request请求对象
一.Request对象由服务器创建,我们使用 浏览器访问服务器资源原理: 二.Request体系结构 其中,servlet 的service()方法参数列表是 servletRequest对象, Ht ...
- Tars | 第2篇 TarsJava SpingBoot启动与负载均衡源码初探
目录 前言 1. Tars客户端启动 @EnableTarsServer 2. Communicator通信器 3. 客户端的负载均衡调用器LoadBalance 最后 前言 通过源码分析可以得出这样 ...