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