上周把XMPP ejabberd server架好了,其實在研究過程中也已經有看了一些Client端的建立,
領導要我弄出一個Web介面的聊天應用,一開始,我找了很多現成Web Client的來試試看,
畢竟對這部分還不太了解,尤其是XMPP使用XML的交換格式我完全沒有概念,
若要憑手打造一定有相當難度,我試了Converse.js、Candy、JSXC等Web-based的Client,
一開始連設定連線Server都研究了好久,但也很開心自己架的Server能馬上看到小小成果,能通訊了!
(題外話Google Developers Console 的Google Cloud Platform真的很方便,可以直接透過瀏覽器SSH進入VM,完全不需要另外設定什麼環境)
But..,試過這些Client,是很不錯,但有一個非常嚴重的問題,
就是我找不到客製化的方式,雖這些Client名義上是open source專案,
但是其實這些Client端的功能幾乎無法讓你改。
也因此我在這邊花了非常非常多的時間,第一個問題就是開發領導要求我的聊天應用要能夠:
1.讓使用者線上註冊帳號
2.1對1聊天
*3.傳輸檔案
1對1聊天每一個Client端都有這項基本功能,
但是註冊帳號功能只有Converse.js有,Candy和JSXC沒有這項功能,
然而Converse.js和Candy沒有傳輸檔案功能只有JSXC有,
起初我的想法是看有沒有辦法自己撰寫一個嵌入進去,但發現這太複雜,日後如果有什麼新功能要加入必定又要頭苦幹。
後來決定,自己完全重新建立一個屬於自己的聊天室應用(當時壓力很大很怕完全搞不出來,畢竟我只是個小小Intern),
所有功能自己打造,經過幾天的爬文、研究,了解到要實作一個以JavaScript為基礎的Client,
可以透過前人開發的Libarary-Strophe.js來寫,
省去了自己研究XML交換的麻煩,他基於Web,以JavaScript向Server進行溝通,並有完整API可以使用,所以我不必思考中間XML溝通的流程,只要把想做的功能寫好就可以。
但一開始還是遇到了很多問題,第一要如何設定HTTP連線,必須在ejabberd裡設定http-bind,第二要啟動在線註冊功能,並關閉10分鐘註冊驗證,這幾個問題花了我非常非常多的時間,且都是設定問題,那時我看文件看到都快瘋了。
總而言之這個禮拜我搞定了使用者在線註冊功能、使用者登入輸入他人ID聊天功能,
還有就是另一個對我來說棘手的傳輸圖片功能。
原本傳輸圖片功能要使用WebRTC,優勢是速度快,但後來發現那必須兩方建立連線,有一方是離線狀態就無法傳輸,這對我的聊天室完全是矛盾,所以後來用以前使用過的File reader API將圖片轉為Base 64的格式傳輸,雖然慢了一點,但能經由ejabberd的一般message傳送,就算朋友不在線也能傳圖片了。
下周首要目標就是解決離線訊息的功能囉!