[Firefly引擎][学习笔记一][已完结]带用户验证的聊天室
原地址:http://bbs.9miao.com/thread-44571-1-1.html
前言:
早在群里看到大鸡蛋分享他们团队的Firefly引擎,但一直没有时间去仔细看看,恰好最近需要开发一个棋牌Game,朋友推荐了很多引擎,参考了众多引擎后,觉得Firefly是一个轻量级易扩展的引擎(好吧,其实就是我懒,懒得去看成熟引擎的手册),项目也没太多时间让我去熟悉大型引擎,于是决定了用Firefly。(很多人就问了:开源棋牌类game这么多,为什么非要自己开发一个,因为我懒,懒得去逐行读代码,我自己有成熟的开发方案及发布流程,为了以后的易维护易扩展原则,所以重新开发,在这里多嘴一句,不是所有的东西都是适合你的,最适合你的,是你自己的东西,但这不成为你不学习别人的优秀作品的理由。)
备注:
此文章仅作为本人记录以及其他群友参考所用
好了,言归正传。
一、系统环境以及开发者技能简介
系统环境:
Windows 7 32bit
Python 2.7.5
Mysql 5.1.28
Memcache for windows (没有官方版,只有个人版,不作为项目需要,只做开发没问题)
开发者技能简介:
2年Python开发经验,熟悉PyQT
二、安装过程
此记录略过,windows下的一些常见错误官方教程里有提过,部分没有提过的错误谷歌也有资料,就不再多嘴
三、下载Demo并进行扩展
注:这个段落因为是持续性的,所以占楼编辑=======
1、下载教程中的开发Demo压缩包(含服务器端及Socket客户端)
2、配置Config.json
3、引用&扩展Config配置
因为没有看到官方给出的全局配置的引用资料,所以查看了项目下的代码,发现其引入规则是读取json文件,并load之,所以在APP的server.py下加入以下代码:
- import json
- _config = json.load('../config.json','r')) #然后采用_config.get方法取回配置dict对象
复制代码
...
4、自定义模块封装以及学习说明
看了一下关于memcache和DBUtils数据库连接池的Demo,没有封装好的数据库对象,那么只能自己封装一个数据库对象,已于18日晚简易封装完毕
19日上图:<ignore_js_op>

<ignore_js_op>

然后查看了引擎里的代码,找到了断开连接请求的方法,并应用到创建连接重构的方法中。18日主要是查看引擎的安装与使用文档
查看了客户端源码,这里提一点,就是数据封包的那段代码可能很多新手朋友不太理解,这里涉及到python数据类型,struct的手册里面也有详细说明,看到不少朋友提问为什么要截取17个字符,你len一下协议头就知道为什么要截取17个字符了
5、关于用户端验证的设计方案
采用Web中常用的Cookie验证(你知道Session或Memcache其实是要吃内存的,当然,memcache的文件缓存例外,不过没必要)
方案为:md5(userId + userName + 其他参数[如用户组等需要验证的] + SYSUSERKEY) = userKey
====19日晚回去贴上18日代码截图(据说有文字限制)。====
关于Server监听的方法暂不忙更新,等晚上写完了再贴上来,免得修改
截止目前为止:服务端与客户端通讯以及数据库通讯已可用,不过有BUG
BUG是建立连接之后,welcome文字发送到Speak_1000去了,这个明晚再调整
需要注意的事:由于官方给出的Socket Demo没有规定数据长度的方法,所以我参考了一些文档之后,采用了定结束符的方法,当然,如果数据过长的话,遇到Socket阻塞则需要多次取出,就要重写方法了,这个在之后的笔记中给出,目前Demo用的是1024个字节。
19日晚更新==================================
截止23:42为止,程序客户端和服务端模块开发完毕,效果如下图:
<ignore_js_op>

<ignore_js_op>

分析程序不足:
未做重复验证处理,未做密码加密处理(这两个都很好做,所以就没做)
登录时,不能向其余在线人员发送提示消息(这个的解决办法想单独靠Scoket就有点难,或者说我知识还匮乏,因为当前设计是通过socket登陆并验证,然后转给server,server里也有验证规则,不用每次都查数据库,想了一下解决方案,可以在客户端存一个当前在线人员列表的缓存,服务端接收到其他客户端请求speak方法时,每次都向客户端发送协议请求方sessionno,如果缓存中存在,则继续执行,不存在则提示上线,这是根据目前的结构的方法,这种设计结构不太合理,因为是二次开发,所以有些东西,也就不想改了,可以实现功能是没错,这种弊端就是连接了不一定判断为登陆,必须请求speak方法激活才算登陆,这也是我的不足,大家一起学习进步)
改动的一些说明:
分离Login与聊天Server监听,重写验证机制,分离数据库模块将其模块化,增加了Model模块,引用方法就是把model路径加入sysPach然后直接调用
<ignore_js_op>

<ignore_js_op>

代码压缩包下载:
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
此次笔记就告一段落,之后将进入进阶模式的开发。希望大家和我一起学习一起进步。
[学习笔记二]预告:
既然socket没有问题了,那么我们反思一下Socket的适用范围,它的定义应该是一个持久化的长连接,那么我们用在什么地方最合适呢?对,就是用在游戏中的服务器端主动提醒和心跳,那么用户验证和上下线以及聊天,都可以通过心跳和队列的组合方法来请求不同的Server Scoket来达到目的,没错,也许你猜到了,学习笔记二将开始逐步切入游戏项目,开始设计各个功能模块了。尽请期待
[Firefly引擎][学习笔记一][已完结]带用户验证的聊天室的更多相关文章
- [Firefly引擎][学习笔记三][已完结]所需模块封装
原地址:http://www.9miao.com/question-15-54671.html 学习笔记一传送门学习笔记二传送门 学习笔记三导读: 笔记三主要就是各个模块的封装了,这里贴 ...
- [Firefly引擎][学习笔记二][已完结]卡牌游戏开发模型的设计
源地址:http://bbs.9miao.com/thread-44603-1-1.html 在此补充一下Socket的验证机制:socket登陆验证.会采用session会话超时的机制做心跳接口验证 ...
- [Firefly引擎][学习笔记四][已完结]服务器端与客户端的通讯
原地址:http://www.9miao.com/question-15-54981.html 传送门:学习笔记一学习笔记二学习笔记三 前言:学习笔记三是模块封装,这个在持续开发中会不断更新, 因为写 ...
- NVelocity模板引擎学习笔记
NVelocity模板引擎学习笔记 学习模板引擎有一段时间现在做一些总结
- 【web开发学习笔记】Structs2 Result学习笔记(三)带參数的结果集
Result学习笔记(三)带參数的结果集 第一部分:代码 //前端 <head> <meta http-equiv="Content-Type" content= ...
- Java IO学习笔记一:为什么带Buffer的比不带Buffer的快
作者:Grey 原文地址:Java IO学习笔记一:为什么带Buffer的比不带Buffer的快 Java中为什么BufferedReader,BufferedWriter要比FileReader 和 ...
- golang学习笔记10 beego api 用jwt验证auth2 token 获取解码信息
golang学习笔记10 beego api 用jwt验证auth2 token 获取解码信息 Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放 ...
- Spring MVC 学习笔记10 —— 实现简单的用户管理(4.3)用户登录显示全局异常信息
</pre>Spring MVC 学习笔记10 -- 实现简单的用户管理(4.3)用户登录--显示全局异常信息<p></p><p></p>& ...
- Spring MVC 学习笔记9 —— 实现简单的用户管理(4)用户登录显示局部异常信息
Spring MVC 学习笔记9 -- 实现简单的用户管理(4.2)用户登录--显示局部异常信息 第二部分:显示局部异常信息,而不是500错误页 1. 写一个方法,把UserException传进来. ...
随机推荐
- 我的手机华为荣耀7,运行android程序不输出Log
解决方法:1 进入手机拨号界面2 输入*#*#2846579#*#*3 输入完毕后自动跳转到<工程菜单>界面4 依次选择后台设置-->LOG设置-->在此可以看见一些列关于LO ...
- 设置win7任务栏显示标题,而不显示缩略图
win7系统的任务栏可以显示桌面缩略图,这是非常好的一个功能,但是有时候我们希望只显示标题,如下所示 怎样设置呢?只要在桌面上的计算机图标上面“右键”,选择“属性”,在弹出的窗口选择“高级系统设置”, ...
- Unity3D项目实战笔记(10):Unity3D编译IPA的PostEvents–节约时间利器
最近,SDK支付等接入差不多了,就从Unity3D生成IPA (企业版License), 然,需要手动执行的PostEvents竟然多大10项+, 这些我默默的承受了1周时间,每次约浪费20分钟-额外 ...
- Manifest文件简介
每个Android项目都包含一个Manifest文件-Android Manifest.xml,它存储在项目层次中的最底层.Manifest可以定义应用程序及其组件和需求的结构和元数据. 它包含了组成 ...
- Js 循环结构
循环结构: for while do….while for循环 for(变量初始化;条件表达式;变量更新){ //循环体 } 说明: 第一步:变量初始化 只执行一次 第二步:判断表达式是否成立 成立则 ...
- Spring boot 1.3.5 RELEASE 官方文档中文翻译--Part2:新手入门
Part II. 新手入门 如果你刚刚开始学习Spring boot或"普通"的Spring,这部分非常适合你!在这里,我们回答了最基础的"什么是?".&quo ...
- 一个疑惑的的问题-ntvdm.exe进程
今天测试反馈了一个问题,在启动我们程序某个模块的程序时,会立即出现一个ntvdm.exe进程,此进程会占用大量的系统资源,导致系统卡住. 当第一眼看到这个现象时,以为是电脑中毒了,所以立即在网上查. ...
- ubuntu grub配置
一.Grub 2包含如下几部分内容:1./boot/grub/grub.cfg 文件2./etc/grub.d/ 文件夹3./etc/default/grub 文件 二.配置和意义: 1.修改grub ...
- ajax返回的json内容进行排序
关键方法:sort()用于对数组的元素进行排序. return a.num-b.num是升序: return b.num-a.num;是降序 writeln在输出后面加\n,在文档里是换行,在html ...
- Discuz x2.5 单页制作的教程
首先,单页包括该单页的php文件和该单页的模板(.htm)文件,比如:host.php.host.htm 单页的php文件内容如下: <?php require './source/class/ ...