PS(廢話):
這段時間都在研究網易的Pomelo框架,作為新手小白,自然遇到了不少坑爹的事情。(當然也有可能是因為自己技術不過關的原因所以導致在很多基礎的問題上糾結了很久。)網上也搜索了好久,但是基本都是復制黏貼的教程,按照教程做肯定沒有問題,但是對於新手來說個別細節上還是有很多無法理解或者說新手容易犯錯的地方。於是乎我就決定把自己遇到的問題寫一下,如果能夠幫助以后入坑的同行新手,也算是積了點陰德,避免大家少走彎路,或者說減少研究的時間。
好了廢話不多說了,還是抓緊開始正題吧。
序言
雖然Pomelo官方的文檔已經對於如何在客戶端中使用Pomelo有了比較詳細的描述,對於一些大拿來說肯定看了文檔就會了,但是奈何鄙人水平實在有限,所以對於CocosCreator這種沒有在官方文檔內的客戶端,自然就不會了。所以就果斷搜索了一下 “如何在CocosCreator中使用Pomelo” 。然后基本搜索到的就是利用聊天為例子的那篇文章了----->點擊我進入文章
當然例子肯定是沒有問題的。但是我自己在使用的時候對於一些細節的問題又產生了疑惑。再加上手賤。。。。所以就有了更大的疑惑了。。。然后就糾結了好久。。
如何在客戶端中正確使用Pomelo
- 首先去下載 ccc-pomelo-chat-client 源碼,然后把源碼中的ccc-pomelo-chat-client/assets/pomelo拷貝到你的 CocosCreator 項目 assets 目錄下,這樣在你的項目中即可使用 pomelo-client 相關 API 了。
- 在onload方法中 初始化pomelo ,帶上host 參數,port參數
- 在onload方法中on好對於服務器的各類響應,就像這樣
- 在需要主動發送消息的地方寫好request方法或者notify方法(我就是作死死在這里的。)
- 然后就大功告成了。
個人手賤遇到的坑
根據官方的API,其實很簡單一共也就4個方法,簡單的不能再簡單了。但往往就是這么簡單的幾個方法把我繞進去了。。。不得不感嘆自己的智商越來越低了。
首先是pomelo.init(params,cb) 這個方法,老實說根據官方的文檔,我是有點糾結的。因為他寫的是“這通常是客戶端的第一次調用”,再加上下載過來的代碼是這樣子的
雖然我知道init是初始化的作用,但是我在具體寫代碼的時候又特么作死了一下,在場景的onload方法中又加了一個request方法,如下圖所示
結果就出錯了,之后我又嘗試了復制兩個init方法,妥妥的成功了,然后就導致我在一瞬間懷疑每一次request請求都要放在Init方法里面。但是作為一名還算寫過代碼的渣渣程序員來說,知道這個想法肯定是錯誤的。其正確的順序肯定是init完了之后你愛去哪里request就去哪里request的。於是乎就糾結了好久。
最后問了群里的人才發現原來是因為我request方法也寫在onload方法里面,所以就導致Init方法還沒有調用成功,他就在那邊request了,這樣自然會出錯了
(哎果然太久沒寫代碼了就容易鬧出這種低級錯誤=。=)
個人經驗小結
客戶端的方法中是包含以下幾個參數的 route msg cb 而服務端則是 msg session next
首先是對應關系
客戶端的msg對應的就是服務端中msg
cb對應的就是服務端的next
而route着是服務端的路由,
session則是不需要傳遞的,因為在init的時候已經創建了,在之后的調用中會自動傳遞。
其次就是參數內的內容了
route參數就是一串string格式的路由,可以簡單的理解為 “服務器.類名.方法名”
msg內的參數我目前是用key-value的數組(其他格式我目前還沒嘗試以后有機會會進行嘗試)
cb和next內的參數進行對應。對於初學javascipt的人可能會有些難理解。但是問題不大。