源地址: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,跪谢
[Firefly引擎][学习笔记二][已完结]卡牌游戏开发模型的设计的更多相关文章
-
[Firefly引擎][学习笔记一][已完结]带用户验证的聊天室
原地址:http://bbs.9miao.com/thread-44571-1-1.html 前言:早在群里看到大鸡蛋分享他们团队的Firefly引擎,但一直没有时间去仔细看看,恰好最近需要开发一个棋 ...
-
[Firefly引擎][学习笔记四][已完结]服务器端与客户端的通讯
原地址:http://www.9miao.com/question-15-54981.html 传送门:学习笔记一学习笔记二学习笔记三 前言:学习笔记三是模块封装,这个在持续开发中会不断更新, 因为写 ...
-
[Firefly引擎][学习笔记三][已完结]所需模块封装
原地址:http://www.9miao.com/question-15-54671.html 学习笔记一传送门学习笔记二传送门 学习笔记三导读: 笔记三主要就是各个模块的封装了,这里贴 ...
-
JavaScript权威设计--jQuery,Ajax.animate,SVG(简要学习笔记二十)[完结篇]
1.$和jquery在全局命名空间中定义的唯一两个变量. 2.jquery是工厂函数,不是构造函数.他返回一个新创建的对象. 3.jquery的四种调用方式: <1>传递C ...
-
吴裕雄--天生自然python学习笔记:python 用pygame模块游戏开发
游戏开发在软件开发领域占据了非常重要的位直.游 戏开发需要用到的技术相当广泛,除了多媒体.图片.动 画的处理外,程序设计更是游戏开发的核心内容. Py game 是为了让 Python 能够进行游戏开 ...
-
AJax 学习笔记二(onreadystatechange的作用)
AJax 学习笔记二(onreadystatechange的作用) 当发送一个请求后,客户端无法确定什么时候会完成这个请求,所以需要用事件机制来捕获请求的状态XMLHttpRequest对象提供了on ...
-
java之jvm学习笔记二(类装载器的体系结构)
java的class只在需要的时候才内转载入内存,并由java虚拟机的执行引擎来执行,而执行引擎从总的来说主要的执行方式分为四种, 第一种,一次性解释代码,也就是当字节码转载到内存后,每次需要都会重新 ...
-
ES6学习笔记<;二>;arrow functions 箭头函数、template string、destructuring
接着上一篇的说. arrow functions 箭头函数 => 更便捷的函数声明 document.getElementById("click_1").onclick = ...
-
muduo学习笔记(二)Reactor关键结构
目录 muduo学习笔记(二)Reactor关键结构 Reactor简述 什么是Reactor Reactor模型的优缺点 poll简述 poll使用样例 muduo Reactor关键结构 Chan ...
随机推荐
-
css3折叠效果
在开发过程中,经常会遇到一些交互效果,今天所联系的便是一个类似折纸的折叠效果,查看效果. 说到折纸,我们先看下图 这是我第一时间想到的大体思路,如果能让这6个面连续的变化角度到0不就可以了吗,运用cs ...
-
php webservice
发请求客户端client.php <?php //需要到php.ini文件中打开extension=php_soap.dll try{ //wsdl方式调用web service //wsdl方 ...
-
tab栏切换的特殊效果
在实际的开发过程中,我们可能会遇到这种需求,如下图 左边是三个tab栏,右边是显示内容的div,当鼠标滑到坐标的tab上时,给它一个高亮显示,让它对应的内容在右边的div中显示出来,当鼠标移出的时候把 ...
-
如何使用ajax将json传入后台数据
首先采用jquery内部封装好的方法是比较简单的,我们只需做的就是修改里面的一些配置: 对$.ajax()的解析: $.ajax({ type: "POST", //提交方式 co ...
-
HTML5-布局的使用
DIV布局: <!DOCTYPE html> <html> <head lang="en"> <meta charset="UT ...
-
Moment.js 超棒Javascript日期处理类库
Moment.js 不容错过的超棒Javascript日期处理类库 主要特性: 3.2kb超轻量级 独立类库,意味这你不需要倒入一堆js 日期处理支持UNIX 时间戳,String,指定格式的Date ...
-
shell脚本编程-处理用户输入
命令行参数 命令行参数:允许在运行脚本时向命令行添加数据值 如:$ ./addem 10 30 读取参数 bash shell会将一些称为位置参数的特殊变量分配给命令行输入的所有参数,甚至包括shel ...
-
SharePoint咨询师之路:备份和恢复系列二 - 备份服务器场
本系列包括: 备份服务器场和配置 备份web和服务应用程序 备份内容数据库 备份网站集 备份自定义项 根据“SharePoint咨询师之路:备份和恢复系列--制定备份计划”我们制定了一下备份计划如下: ...
-
Mysql打开日志信息
还可参考博客:http://pangge.blog.51cto.com/6013757/1319304 1)怎么查看mysql是否启用了日志 mysql>show variables like ...
-
PHP学习笔记——PHP脚本和JAVA连接mysql数据库
环境 开发包:appserv-win32-2.5.10 服务器:Apache2.2 数据库:phpMyAdmin 语言:php5,java 平台:windows 10 java驱动:mysql-con ...