源地址:http://bbs.9miao.com/thread-44603-1-1.htmlphp
在此補充一下Socket的驗證機制:
socket登錄驗證。會採用session會話超時的機制
作心跳接口驗證
保持一個長鏈接
也爲推送消息提供
======這段是一個之前同事給個人JAVA Socket驗證機制的例子===========
socket通訊通常是找不到頭這些的,要自定義封裝通訊消息類
如開源框架netty,消息進出都有自定義加密和選擇性壓縮的
socket不想http同樣能找到某個方法,他就監聽ip的某個端口
經過解析消息類中的主題方法,抽象接口實現的
消息接收:
<ignore_js_op>html
其餘圖就不上了,主要是一個概念的普及
===================================================
前言:
若是你有仔細分析學習筆記一中的代碼,那麼相信你對python以及Firefly已經有了一個大體的認識,那麼剩餘的不認識的也就不要緊了,官方提供了開發手冊,因此就不逐步深刻出筆記了,該有的,會有人發的。
開始準備工做:
【目標】
如今,咱們的目標是一個卡牌遊戲,我選擇了傳統的鬥地主來進行開發。
【開發前的準備】
任何一款遊戲都會有策劃書的,策劃書咱們就免了,由於鬥地主誰都會,並且也有前輩的開源做品,因此咱們的準備工做是,清楚鬥地主的遊戲規則,和程序的實現方案。
因而,翻了翻互聯網資料,找到一個參考資料:
http://blog.csdn.net/cq361106306/article/details/7855582
雖然是JAVA版的,可是原理都是同樣的,函數也差很少同樣的,不同的只是內置函數的寫法和語法規範而已,要看懂確定是沒有問題的
【服務器架構】
首先,咱們須要一個LoginServer,這是毋庸置疑的事情
而後,咱們須要一個遊戲主服務器mainGameServer
(也許,你會須要一個排行服務器)
最後,咱們則須要一個聊天服務器chatServer(既然是網遊,沒有聊天系統不等於單機麼?)
自己這個遊戲不復雜,因此咱們就這樣設定吧。
【服務器架構圖】
<ignore_js_op>python
題外話:不知道你們有沒有作過私服,出名的如傳奇,誅仙,QQ西遊私服。裏面的結構大概也是如此,不說它究竟是有用仍是無用,存在便是合理。這點,在我仍是小白的時候就深覺得然,之前老聽人家說GS報錯,GS未啓動,感受好牛X好高端的樣子,後來漸漸明白,其實就是GameServer。
好了,言歸正傳,既然架構圖有了,遊戲方案也有了,那麼下一步就是數據建模了,數據結構必定要作好,由於這跟你服務器的性能和擴展息息相關。
在這裏我用的工具是PowerDesigner這款軟件進行建模,方便又實用,易管理,易查詢
首先咱們肯定幾個核心的表
User
-----userMain 用戶主表,存放用戶帳號,密碼,餘額等重要信息 表類型:InnoDB,這麼重要的表,你確定要支持事務回滾來着。
-----userBase 用戶基礎表,存放一些只作查詢用的字段,如頭像,我的簡介
Log
-----loginLog 用戶登錄日誌
-----actionLog 用戶操做日誌
-----rfloat 用戶資金流水
-----gameLog 遊戲記錄日誌
Main //暫時只有兩個,由於業務邏輯暫時不忙管,只管遊戲
-----sysMsg 系統消息表
----- userMsg 用戶消息表//暫時棄用,由於還不涉及到用戶短信,至於爲何要和系統消息分開,是由於消息表數據龐大
============================持續更新============================
度過了一個愉快的週末,繼續更新
貼上數據模型的代碼以及數據庫模型文件
<ignore_js_op>mysql
<ignore_js_op>sql
<ignore_js_op>數據庫
庫建設完畢,如今開始一些基本模塊的封裝,在這裏說一點,不是全部的模塊都須要封裝,看需求和維護而定,我我的須要封裝是由於我封裝後能讓我開發效率提升,每一個人狀況不同,底子也不同,根據自身狀況來。
在這裏我把每一個模塊及其包含的內容列出來(持續更新):
服務器
模塊名 | 方法名 | 方法說明 |
用戶基礎模塊 userModel |
userLogin | 用於用戶登錄時的方法 |
regUser | 註冊用戶的方法 | |
loginCheck | 檢查用戶登錄狀態的方法 | |
heartCheck | 用戶心跳檢測的方法 | |
fundsCheck | 檢查資金是否異常的方法 | |
loginUpdate | 登錄時更新用戶登錄記錄並寫日誌的方法 | |
sendSysMsg | 發送系統消息的方法 | |
sendUserMsg | 發送用戶消息的方法 | |
readSysMsg | 讀取系統消息並更新狀態的方法 | |
readUserMsg | 讀取用戶消息並更新狀態的方法 | |
userTalk | 用戶在遊戲中發言的方法 (這裏我考慮是像QQ鬥地主同樣固定發言防止做弊, 仍是不限制用戶發言,我的以爲防做弊好一點) |
|
日誌模塊 logModel |
sysLog | 系統日誌的方法(保存log日誌的方法) |
userLoginLog | 用戶寫登錄日誌的方法 | |
userActionLog | 用戶寫操做日誌的方法 | |
gameResultLog | 遊戲結果日誌的方法 | |
rfloatLog | 寫資金流水的方法 | |
遊戲主模塊 gameMainModel |
showUserCount | 在線用戶統計的方法 |
pushMessage | 推送消息的方法 | |
joinGameQueue | 加入遊戲隊列的方法 | |
gameMatching | 匹配玩家並生成遊戲空間,隨機用戶順序的方法 | |
shufflingLicensing | 洗牌發牌的方法,並整理排序 | |
grabLandlord | 搶地主的方法 | |
landlordCards | 地主牌分發及公示的方法 | |
showCards | 出牌的方法 | |
doubledFunds | 炸彈倍數翻倍計算的方法 | |
cardAlarm | 報警的方法 | |
settleAccounts | 結算並將用戶清除隊列的方法 | |
系統模塊 sysModel |
mysqlObject | 數據庫模塊,具體方法再也不羅列,這裏採起封裝主從庫 |
memcacheEx | memcached封裝的模塊,用於分佈式集羣 |
好了,關於學習筆記二卡牌遊戲開發模型的設計就告一段落了,學習筆記三將開始對各個模塊進行逐個封裝。如今模型有了,開發思路就愈加的清晰,當模塊封裝完畢以後,就是服務器端的開發了,咱們一步步走,不一口氣吃成一個胖子,因此,學習筆記三將持續很長一段時間逐個更新,由於畢竟我只有晚上纔有時間去鼓搗,因此耐心等待吧,我沒有已有代碼參考,不能複製粘貼,因此速度會稍微慢一點
另外,誠請一枚AS攻城獅幫我完成筆記,有意思的聖獸請聯繫我QQ:251920948,跪謝session