更新:2017年8月1日html
實在是抱歉,git上的Demo這麼久,有問題本身沒有發現!確定給你們形成過不方便,抱歉!git上Demo剛從新上傳,要有須要的能夠去下載,要有問題能夠直接找我QQ聯繫我!前端
最近在總結Socket方面的知識,等文章寫完會發不來,這篇文章是去年什麼四五月份寫的吧,那是水平也是有限,但願接下來能總結的比這篇好一點!!java
在Demo中,XMPP接收發送消息這一塊的代碼我暫時是刪除了,仿照微信的聊天框架是在的,你要想經過XMPP本身在項目中試試,你須要的也就是在Demo中集成XMPP,而後寫一下它的連接和接收/發送方法,其實也很簡單!等我補上去我也會在這裏第一時間通知!mysql
和這個相關的Socket的系列文章也是剛開始寫,有須要的能夠看看,系列文章:ios
Socket學習總結系列(一) -- IM & Socketgit
Socket學習總結系列(二) -- CocoaAsyncSocketgithub
如下正文:sql
即時通信(IM)在iOS這片江湖裏面已經算是一個老者了,我這小旋風也是在很早之前巡山的時候,就知道有即時通信這個妖怪,之前也多多少少接觸過一些,在造App的時候用過,怎麼能夠用「造」這個詞,說着說着就感受要跑題了,腦海中怎麼波濤翻滾的樣子。很差,纔開頭了兩句,不能亂開車!說回正題,我知道的即時通信有用 CocoaAsyncSocket 還有 XMPPFramework 實現的,固然也有如今也有大部分接入環信等等三方的。有些東西掩蓋不住的,可能可能許多同行和我同樣,感受你知道的愈來愈多,就越會以爲本身像是個文盲,其實不懂的真的還有好多好多,還有那麼多等着你去學習!這時候果斷就要引入幾句有哲學含義的話,安慰一下本身。好比「你必定要努力,但千萬彆着急」。這句是簡書主編的一本書的書名,順便也推薦給你們去看看,陶冶一下情操!數據庫
應該不少同行也都知道不少三方即時通信,知道它們是怎麼用的,要是還清楚網絡協議底層的知識,其實能夠挺讓我羨慕的,畢竟不是計算機專業的,懂得很少,也知道還有不少和我同樣,算是一個半路出家的孩子,我仍是建議有時間的話去了解學習一下這些最底層,最基礎的東西。我也在不斷的學習嘗試和總結中,相信這些底層的基礎的是你走向大神路,必不可少的,恩,對,必不可少 ! 服務器
這篇文章咱們就說說怎樣本身搭建一個仿模仿微信的聊天框架和怎樣搭建Openfire服務器來實現一個模仿微信的聊天。
要不造該咋辦?
下面是一些應該能幫到你們的東西,能夠去好好看一看,固然不少理論上的東西,你得花時間,前提是你得有時間(=@__@=)!!
一: Socket通訊 花時間去了解一下吧,在接觸 CocoaAsyncSocket 以前,記得先了解一下它的原理也是必要的,由於 CocoaAsyncSocket 是對蘋果 CFNetwork 的封裝,因此你瞭解一下 CFNetwork 也是好滴。
二: XMPP協議 瞭解XMPP究竟是什麼,我知道可能有許多剛PX出來的寶寶們,也常常聽到會用XMPP作即時通信,那你知道 XMPP 究竟是什麼嗎?瞭解他是什麼了,OK ,它裏面一些類和一些方法的使用,也全都在 XMPPFramework使用 這裏了。
三: 環信、網易、融雲等等的第三方,我本身以爲它真的是給前端開發者省了很大很大的功夫,其實有詳細開發文檔的東西難度都是降低了一萬點的。它還有UI聊天框架,你要作的,就是把它接到本身的APP裏面,還有啥好說的,說了也說不過官方文檔。
NOTE: 在這裏只是這樣簡單的說了一下這幾個知識點,在最上面更新的兩篇文章的第一篇中有細細總結即時通信該怎樣去選擇,怎樣作的問題!
框架和服務器:
仍是按順序來吧,咱們先說說微信的整個聊天框架搭建的一個思路(對方不想和你說話,並向你丟了一堆 高仿微信聊天框架源碼 I Need You 星星!)。我也是看着 CocoaChina 上大神的一步步分析,模仿寫的,在源代碼裏面註釋滿滿的,你要認真看,應該沒問題!
說說上面的框架,採用的是在 控制器1 中添加 控制器2 和控制器3 的方式,控制器1就是一個普通的控制器,他是控制器2 和 控制器3 的代理,控制器2呢就是一個 TableViewController 用來顯示咱們的聊天消息的。控制器3就主要是控制下面鍵盤部分的東西,鍵盤部分其實感受應該是整個的關鍵,也是有鍵盤輸入,語音,表情,更多這幾部分組成的。整個一個主要的思路就是,控制器3 上的事件都是點擊後它的代理 控制器1 響應,而後在控制器1 中去改變 控制器2 上要顯示的東西。
簡單羅列一下 Git上源碼的一個大概,方便你們看吧。
整個聊天框架在 Chat 文件夾裏面,Chat文件夾下面的 Models 裏面存放的確定就是各類 Model了,在 Views 文件夾下面,Message 存放的是各類要顯示的 cell , Box 存放的是各類控制器3裏面的界面。
控制器1: XYDJViewController 控制器2:ZXChatMessageController 控制器3:ZXChatBoxController
代碼裏面有詳細的註釋說明 點擊下載聊天框架源碼
說說聊天服務器吧!
之前項目有用到 AsyncSocket,環信就很少說了,說再多也然並卵,你能說的比人家官方文檔詳細嗎?O(∩_∩)O哈哈。。看着文檔去啪啪啪敲鍵盤就夠了,那就說說 XMPPFramework 吧。你要是沒有後臺也沒有服務器,本身玩,那就和本身玩本身同樣,我是利用 Openfire 服務器和 Mysql 數據庫 還有 Spark 或者 Adium 前端來使用的。
關於 Openfire 服務器和 Mysql 數據庫的安裝配置,你們去看看這篇 Openfire配置安裝
根據我本身配置的狀況,給你們說說下面注意的幾點!先記得去配置安裝數據庫,再去配置安裝服務器!固然也不是死的,只是這個順序合理一點!
配置數據庫的時候有幾個注意點提一下:
在這個新的 Connections 下面去添加一個新的數據庫,在配置服務器的時候,你們必定注意:
一: 你得去安裝 Java 的JDK。我也試着安裝過最新的JAVA環境,事實證實,仍是得安裝JDK。。JAVA/jdk連接 安裝 8U91版 MAC OSX的。
二: 若是仍是開啓失敗。可能就是權限的問題,在終端中輸入:
sudo chmod -R 777 /usr/local/openfire/bin
sudo su
cd /usr/local/openfire/bin
export JAVA_HOME=`/usr/libexec/java_home`
echo $JAVA_HOME /Library/Java/JavaVirtualMachines/jdk1.8.0_51.jdk/Contents/Home
cd /usr/local/openfire/bin
./openfire.sh
三: 在連接數據庫的時候:
用戶名和密碼,就按照你剛開始在配置數據庫的時候的用戶名和密碼填寫。和上上圖的 1 2 對應。
還有這個數據庫URL,你在最上面選擇了 .MySQL以後,下面就會有自動的填充,其中的 [host-name] 就是你配置數據庫的時候 3 處的地址,[database-name] 就是你在配置數據庫的時候在新建的 Connections 裏面建立的數據庫的名字,不是 Connections 的名字,注意一下。
Spark 或者 Adium 你們點擊連接下載。你能夠兩個都下載了,建立兩個用戶,分別登陸加好友聊聊天試試,看服務器有沒有什麼問題。還有問題的能夠加我QQ詳聊,QQ我博客園首頁有。
那結果呢?
先是建立了兩個用戶,聊兩句天看看咱們的服務器OK麼,結果它是沒問題的。
那咱們用XMPPFramework呢?
關於 XMPPFramework具體的方法怎麼使用 的,我就再也不多說了,你能夠找到的太多太多的文章去學習。在上面的框架中簡單的測試了一下能不能接收到消息,證實是沒問題的。
順便說說這個XMPP接收到的數據格式是 XML 格式的,有些寶寶可能接觸到的 JSON 格式的數據比較多,XML格式的數據解析不怎麼熟悉,連接XML解析 給你們,數據解析的講解的很是詳細,寫的也是棒棒的!!
結束了?
恩,寫到這裏差很少就結束了,得說明一點,上面的XMPP的測試代碼尚未加進去咱們寫的框架當中去,是寫在 XWViewController 裏面的,你們能夠下載代碼本身去完善一下,有時間我本身也會把它加進去的。。
最後: 給你們灌一口貼在咱們公司牆壁上的雞湯,「你不努力,誰也給不了你想要的生活!」 ,隨筆寫的有問題的地方你們留言指正,在首頁也有我 QQ 能夠加 QQ交流 。。。