源地址: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引擎][学习笔记二][已完结]卡牌游戏开发模型的设计的更多相关文章

  1. [Firefly引擎][学习笔记一][已完结]带用户验证的聊天室

    原地址:http://bbs.9miao.com/thread-44571-1-1.html 前言:早在群里看到大鸡蛋分享他们团队的Firefly引擎,但一直没有时间去仔细看看,恰好最近需要开发一个棋 ...

  2. [Firefly引擎][学习笔记四][已完结]服务器端与客户端的通讯

    原地址:http://www.9miao.com/question-15-54981.html 传送门:学习笔记一学习笔记二学习笔记三 前言:学习笔记三是模块封装,这个在持续开发中会不断更新, 因为写 ...

  3. [Firefly引擎][学习笔记三][已完结]所需模块封装

    原地址:http://www.9miao.com/question-15-54671.html 学习笔记一传送门学习笔记二传送门 学习笔记三导读:        笔记三主要就是各个模块的封装了,这里贴 ...

  4. JavaScript权威设计--jQuery,Ajax.animate,SVG(简要学习笔记二十)[完结篇]

    1.$和jquery在全局命名空间中定义的唯一两个变量.   2.jquery是工厂函数,不是构造函数.他返回一个新创建的对象.   3.jquery的四种调用方式:     <1>传递C ...

  5. 吴裕雄--天生自然python学习笔记:python 用pygame模块游戏开发

    游戏开发在软件开发领域占据了非常重要的位直.游 戏开发需要用到的技术相当广泛,除了多媒体.图片.动 画的处理外,程序设计更是游戏开发的核心内容. Py game 是为了让 Python 能够进行游戏开 ...

  6. AJax 学习笔记二(onreadystatechange的作用)

    AJax 学习笔记二(onreadystatechange的作用) 当发送一个请求后,客户端无法确定什么时候会完成这个请求,所以需要用事件机制来捕获请求的状态XMLHttpRequest对象提供了on ...

  7. java之jvm学习笔记二(类装载器的体系结构)

    java的class只在需要的时候才内转载入内存,并由java虚拟机的执行引擎来执行,而执行引擎从总的来说主要的执行方式分为四种, 第一种,一次性解释代码,也就是当字节码转载到内存后,每次需要都会重新 ...

  8. ES6学习笔记<二>arrow functions 箭头函数、template string、destructuring

    接着上一篇的说. arrow functions 箭头函数 => 更便捷的函数声明 document.getElementById("click_1").onclick = ...

  9. muduo学习笔记(二)Reactor关键结构

    目录 muduo学习笔记(二)Reactor关键结构 Reactor简述 什么是Reactor Reactor模型的优缺点 poll简述 poll使用样例 muduo Reactor关键结构 Chan ...

随机推荐

  1. 转 Android 4.0后,自定义Title报错 You cannot combine custom titles with other title feature

      自定义Titlebar时为了避免冲突 需要修改:AndroidManifest.xml android:theme="@style/mystyle" styles.xml文件中 ...

  2. hiho 1182 : 欧拉路·三

    1182 : 欧拉路·三 这时题目中给的提示: 小Ho:是这样的,每次转动一个区域不是相当于原来数字去掉最左边一位,并在最后加上1或者0么. 于是我考虑对于"XYYY",它转动之后 ...

  3. ASP.NET WEB API 初探

    本文初步介绍如何简单创建一个ASP.NET Web Api 程序. Web Api 顾名思义就是一个Api接口,客户端可调用此接口进行业务操作.此类应用与 ASP.NET  web服务(即使用扩展名. ...

  4. docker & nodejs

    Docker 部署 Node js demo程序 1.准备node js程序,使用express框架. mkdir demo 在demo文件夹下建立package.json { "name& ...

  5. PHP获取IP及地区信息(纯真IP数据库)

    昨天在写程序的时候,发现在用户的时候记录IP和地区信息也许以后用得上,去网上找了找,发现实现的方式有好多好多,因为我用的ThinkPHP,后来又去TP官网找了找,最后采用了下面这种方法. <?p ...

  6. Eclipse查看源码乱码问题

    在同一个工作区下,依赖的Jar包如果既有GBK编码,又有UTF-8编码,就会出现的问题. 常规解决方法 1.切换工作区编码.麻烦,效率低. 2.设置Jar包编码,只有Eclipse4.2支持,4.0以 ...

  7. Delphi Idhttp Post提交 Aspx/Asp.net 时 500错误的解决办法。

    一直使用Delphi写程序,因为习惯了,用起来方便. 但是有一个问题困扰了我半年了.就是使用Idhttp Post提交时候总会有莫名其妙的错误,大部分网站没问题,但是一遇到Asp.net就报错500. ...

  8. Delphi中的四舍五入函数

    一.Delphi中的四舍五入法     四舍五入是一种应用非常广泛的近似计算方法,针对不同的应用需求,其有算术舍入法和银行家舍入法两种.     所谓算术舍入法,就是我们通常意义上的四舍五入法.其规则 ...

  9. 生产场景NFS共享存储优化及实战

    生产场景NFS共享存储优化: 1.硬件:sas/ssd磁盘,买多块,raid0/raid10,网卡好 2.NFS服务器端优化加all_squash,async /backup/NFS 192.168. ...

  10. Oracle非默认监听的处理会遇到的问题以及处理方法

    第一种情况:只是修改默认端口 1.当前监听状态: C:\Windows\system32>lsnrctl status LSNRCTL for 64-bit Windows: Version 1 ...