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