[Firefly引擎][學習筆記一][已完結]帶用戶驗證的聊天室

原地址: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

  1. import json
  2. _config = json.load('../config.json','r'))          #而後採用_config.get方法取回配置dict對象
複製代碼

...
        四、自定義模塊封裝以及學習說明
                看了一下關於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

相關文章
相關標籤/搜索