源地址:http://bbs.9miao.com/thread-44603-1-1.html

在此补充一下Socket的验证机制:
socket登陆验证。会采用session会话超时的机制
做心跳接口验证
保持一个长连接
也为推送消息提供

======这段是一个以前同事给我的JAVA Socket验证机制的例子===========
socket通信一般是找不到头这些的,要自定义封装通信消息类
如开源框架netty,消息进出都有自定义加密和选择性压缩的
socket不想http一样能找到某个方法,他就监听ip的某个端口
通过解析消息类中的主题方法,抽象接口实现的

消息接收:
<ignore_js_op>

其他图就不上了,主要是一个概念的普及
===================================================

前言:
        如果你有仔细分析学习笔记一中的代码,那么相信你对python以及Firefly已经有了一个大致的认识,那么剩余的不认识的也就没关系了,官方提供了开发手册,所以就不逐步深入出笔记了,该有的,会有人发的。

开始准备工作:
        【目标】
        现在,我们的目标是一个卡牌游戏,我选择了传统的斗地主来进行开发。
        
        【开发前的准备】
        任何一款游戏都会有策划书的,策划书我们就免了,因为斗地主谁都会,而且也有前辈的开源作品,所以我们的准备工作是,清楚斗地主的游戏规则,和程序的实现方案。
        于是,翻了翻互联网资料,找到一个参考资料:
        http://blog.csdn.net/cq361106306/article/details/7855582
        
        虽然是JAVA版的,但是原理都是一样的,函数也差不多一样的,不一样的只是内置函数的写法和语法规范而已,要看懂肯定是没有问题的

【服务器架构】
        首先,我们需要一个LoginServer,这是毋庸置疑的事情
        然后,我们需要一个游戏主服务器mainGameServer
        (也许,你会需要一个排行服务器)
        最后,我们则需要一个聊天服务器chatServer(既然是网游,没有聊天系统不等于单机么?)
        本身这个游戏不复杂,所以我们就这样设定吧。

【服务器架构图】
       <ignore_js_op>

题外话:不知道大家有没有做过私服,出名的如传奇,诛仙,QQ西游私服。里面的结构大概也是如此,不说它到底是有用还是无用,存在即是合理。这点,在我还是小白的时候就深以为然,以前老听人家说GS报错,GS未启动,感觉好牛X好高端的样子,后来渐渐明白,其实就是GameServer。

好了,言归正传,既然架构图有了,游戏方案也有了,那么下一步就是数据建模了,数据结构一定要做好,因为这跟你服务器的性能和扩展息息相关。
        在这里我用的工具是PowerDesigner这款软件进行建模,方便又实用,易管理,易查询 
        首先我们确定几个核心的表
        User
        -----userMain   用户主表,存放用户账号,密码,余额等重要信息  表类型:InnoDB,这么重要的表,你肯定要支持事务回滚来着。
        -----userBase        用户基础表,存放一些只做查询用的字段,如头像,个人简介
        Log
        -----loginLog        用户登陆日志
        -----actionLog        用户操作日志
        -----rfloat                用户资金流水
        -----gameLog        游戏记录日志
        Main //暂时只有两个,因为业务逻辑暂时不忙管,只管游戏
        -----sysMsg        系统消息表
        -----        userMsg        用户消息表//暂时弃用,因为还不涉及到用户短信,至于为什么要和系统消息分开,是因为消息表数据庞大
        ============================持续更新============================
        度过了一个愉快的周末,继续更新
        贴上数据模型的代码以及数据库模型文件
       <ignore_js_op>

<ignore_js_op>

<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,跪谢