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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM