iOS實現XMPP通訊(一)搭建Openfire

奔跑的鴻發表於2021-10-11

安裝Openfire

  • Openfire官網下載地址:https://igniterealtime.org/downloads/ (也是Spark客戶端的下載地址)
    Openfire下載並安裝後,開啟系統偏好設定,底部會出現Openfire
iOS實現XMPP通訊(一)搭建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
iOS實現XMPP通訊(一)搭建Openfire

以上電腦安裝有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,如下:

iOS實現XMPP通訊(一)搭建Openfire
  • 方法二:系統全域性宣告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
iOS實現XMPP通訊(一)搭建Openfire

以上啟動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
iOS實現XMPP通訊(一)搭建Openfire

配置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

相關文章