原地址:http://bbs.9miao.com/thread-44571-1-1.htmlphp
前言:
早在羣裏看到大雞蛋分享他們團隊的Firefly引擎,但一直沒有時間去仔細看看,剛好最近須要開發一個棋牌Game,朋友推薦了不少引擎,參考了衆多引擎後,以爲Firefly是一個輕量級易擴展的引擎(好吧,其實就是我懶,懶得去當作熟引擎的手冊),項目也沒太多時間讓我去熟悉大型引擎,因而決定了用Firefly。(不少人就問了:開源棋牌類game這麼多,爲何非要本身開發一個,由於我懶,懶得去逐行讀代碼,我本身有成熟的開發方案及發佈流程,爲了之後的易維護易擴展原則,因此從新開發,在這裏多嘴一句,不是全部的東西都是適合你的,最適合你的,是你本身的東西,但這不成爲你不學習別人的優秀做品的理由。)
備註:
此文章僅做爲本人記錄以及其餘羣友參考所用
好了,言歸正傳。
1、系統環境以及開發者技能簡介
系統環境:
Windows 7 32bit
Python 2.7.5
Mysql 5.1.28
Memcache for windows (沒有官方版,只有我的版,不做爲項目須要,只作開發沒問題)
開發者技能簡介:
2年Python開發經驗,熟悉PyQT
2、安裝過程
此記錄略過,windows下的一些常見錯誤官方教程裏有提過,部分沒有提過的錯誤谷歌也有資料,就再也不多嘴
3、下載Demo並進行擴展
注:這個段落由於是持續性的,因此佔樓編輯=======
一、下載教程中的開發Demo壓縮包(含服務器端及Socket客戶端)
二、配置Config.json
三、引用&擴展Config配置
由於沒有看到官方給出的全局配置的引用資料,因此查看了項目下的代碼,發現其引入規則是讀取json文件,並load之,因此在APP的server.py下加入如下代碼:html
...
四、自定義模塊封裝以及學習說明
看了一下關於memcache和DBUtils數據庫鏈接池的Demo,沒有封裝好的數據庫對象,那麼只能本身封裝一個數據庫對象,已於18日晚簡易封裝完畢
19日上圖:<ignore_js_op>python
<ignore_js_op>sql
而後查看了引擎裏的代碼,找到了斷開鏈接請求的方法,並應用到建立鏈接重構的方法中。18日主要是查看引擎的安裝與使用文檔
查看了客戶端源碼,這裏提一點,就是數據封包的那段代碼可能不少新手朋友不太理解,這裏涉及到python數據類型,struct的手冊裏面也有詳細說明,看到很多朋友提問爲何要截取17個字符,你len一下協議頭就知道爲何要截取17個字符了
五、關於用戶端驗證的設計方案
採用Web中經常使用的Cookie驗證(你知道Session或Memcache實際上是要吃內存的,固然,memcache的文件緩存例外,不過不必)
方案爲:md5(userId + userName + 其餘參數[如用戶組等須要驗證的] + SYSUSERKEY) = userKey
====19日晚回去貼上18日代碼截圖(聽說有文字限制)。====
關於Server監聽的方法暫不忙更新,等晚上寫完了再貼上來,省得修改
截止目前爲止:服務端與客戶端通信以及數據庫通信已可用,不過有BUG
BUG是創建鏈接以後,welcome文字發送到Speak_1000去了,這個明晚再調整
須要注意的事:因爲官方給出的Socket Demo沒有規定數據長度的方法,因此我參考了一些文檔以後,採用了定結束符的方法,固然,若是數據過長的話,遇到Socket阻塞則須要屢次取出,就要重寫方法了,這個在以後的筆記中給出,目前Demo用的是1024個字節。
19日晚更新==================================
截止23:42爲止,程序客戶端和服務端模塊開發完畢,效果以下圖:
<ignore_js_op>數據庫
<ignore_js_op>json
分析程序不足:
未作重複驗證處理,未作密碼加密處理(這兩個都很好作,因此就沒作)
登陸時,不能向其他在線人員發送提示消息(這個的解決辦法想單獨靠Scoket就有點難,或者說我知識還匱乏,由於當前設計是經過socket登錄並驗證,而後轉給server,server裏也有驗證規則,不用每次都查數據庫,想了一下解決方案,能夠在客戶端存一個當前在線人員列表的緩存,服務端接收到其餘客戶端請求speak方法時,每次都向客戶端發送協議請求方sessionno,若是緩存中存在,則繼續執行,不存在則提示上線,這是根據目前的結構的方法,這種設計結構不太合理,由於是二次開發,因此有些東西,也就不想改了,能夠實現功能是沒錯,這種弊端就是鏈接了不必定判斷爲登錄,必須請求speak方法激活纔算登錄,這也是個人不足,你們一塊兒學習進步)
改動的一些說明:
分離Login與聊天Server監聽,重寫驗證機制,分離數據庫模塊將其模塊化,增長了Model模塊,引用方法就是把model路徑加入sysPach而後直接調用
<ignore_js_op>windows
<ignore_js_op>緩存
代碼壓縮包下載:
服務器
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
這次筆記就告一段落,以後將進入進階模式的開發。但願你們和我一塊兒學習一塊兒進步。
[學習筆記二]預告:
既然socket沒有問題了,那麼咱們反思一下Socket的適用範圍,它的定義應該是一個持久化的長鏈接,那麼咱們用在什麼地方最合適呢?對,就是用在遊戲中的服務器端主動提醒和心跳,那麼用戶驗證和上下線以及聊天,均可以經過心跳和隊列的組合方法來請求不一樣的Server Scoket來達到目的,沒錯,也許你猜到了,學習筆記二將開始逐步切入遊戲項目,開始設計各個功能模塊了。盡請期待session