自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

go-sunny博客

飘来飘去

  • 博客(44)
  • 资源 (2)
  • 收藏
  • 关注

原创 http协议总结

看到很多关于HTTP协议的文章,大多都有点云里雾里的感觉,总觉得没有看透,也谈不上理解,也不知道怎么去利用协议知识去改善WEB体验,关于http协议还有很多的疑问。这些或许浅显,网上一直都没有确切的答案,比如这个协议到底是谁在遵守,协议做了哪些规定,request header 和response header到底做了些什么,是否可以控制request header,如何使用PHP的header(

2014-09-16 12:16:38 1154

原创 安装openresty扩展 lpack库

lpack包简介This is a simple Lua library for packing and unpacking binary data.可以

2014-04-21 17:49:20 3390

原创 lua protobuffer的实现

首先,需要了解一下google的protocol buffer协议和他的gong

2014-04-21 17:12:40 5146 2

原创 安装openresty

安装openresty#!/base/binAPPDIR=/data/appmkdir -p $APPDIR# 设置APPDIR为环境变量,因为其它模块安装的时候需要用到这个变量export APPDIRUPROFILE=/etc/profileyum install -y gcc-c++#当前脚本所在的目录(必须与openresty-1.2.8.6.tar.gz为同一个目录

2014-04-21 15:53:25 2014

转载 MySQL的联结(Join)语法

1.内联结、外联结、左联结、右联结的含义及区别: 在讲MySQL的Join语法前还是先回顾一下联结的语法,呵呵,其实连我自己都忘得差不多了,那就大家一起温习吧(如果内容有错误或有疑问,可以来信咨询:陈朋奕 chenpengyi#gmail.com),国内关于MySQL联结查询的资料十分少,相信大家在看了本文后会对MySQL联结语法有相当清晰的了解,也不会被Oracle的外联结的(“+”号)

2014-02-14 09:49:53 934

原创 使用iframe实现无刷新表单提交

实现无刷新提交表单,一般使用ajax,需要操作DOM,还有一种方法就是采用iframe提交,比ajax更简单,而且不需要操作DOM。index.html ,注意target指向的是一个iframe index.php<?phpecho alert($_POST['cmt'], 'error', 'halt');function alert($msg,

2014-01-16 16:36:06 1810

原创 javascript 跨域请求详细分析

什么是跨域请求比如用户使用浏览器打开一个网站 (www.AAA.com)的首页,这个时候浏览器会执行来自网站www.AAA.com的一个javascript的函数,这个函数是向网站(www.BBB>com)请求数据:$.getJSON('www.BBB.com/index.php', funciton(data) { // 后续操作});网站A的脚本去请求网站B的数据,就是跨域请

2014-01-13 21:56:09 2143

原创 PHP文件的锁定机制

文件系统操作是在网络环境下完成的,可能有多个客户端用户在同一时刻读对服务器的同一个文件访问。如果有个用户正在向文件中写入数据,当还没有写完的时候,其他用户在这一时刻也向这个文件写入数据,这样就可能造成数据写入混乱。还有,当用户没有将数据写完时,其他用户读取这个文件的内容时,就会得到残缺的数据。如何避免这样的情况发生,需要做到如下几点:1)当有用户读取文件的时候,这个文件不能被写操作。可以同

2014-01-04 13:31:20 2289

原创 “与”和“或”运算实现权限管理

游戏中,常常有这样的提示“需要完成某主线任务才开放此模块”,这样的功能如何实现。比如,玩家需要完成代号为501220的主线任务时,才会开启战斗模块,需要完成代号为501221的主线任务,才开启贸易模块。实现方式可以借鉴linux的权限管理系统来实现这样的功能。在linux中,查看这个文件的所有者的权限的时候可能是7 表示这个文件的所有者对这个文件可读(4),可写(2),可执行(1)。如下图

2014-01-02 16:03:19 2616

原创 使用memcache和redis实现队列

队列的基本功能是:压入和弹出,先进先出。memcache的实现方式使用memcache实现队列,需要使用两个key来标记队列的状态:pushKey 记录压入队列的总数,popKey记录弹出队列的总数。压入数据:pushKey初始值为0,每压入队列一个数据的时候,pushKey自增1。弹出数据:popKey初始值为0,每从队列中弹出一个数据的时候,popKey自增1。同时删除队列

2014-01-02 14:06:34 4360

转载 剖析PHP中的输出缓冲

首先明确一下PHP的输出顺序1.打开了php输出缓存: echo,print -> php output_buffring -> server buffering -> browser buffering -> browser display2.未打开php输出缓存: echo,print -> server buffering -> browser buffering -> br

2013-12-17 17:54:42 1001

原创 充值系列——充值系统安全问题(四)

这是充值系列的最后一篇,将讨论充值安全的问题。正如这个系列的其他文章提到的,充值系统的流程如下:注意: 4,5执行顺序不确定,步骤4是支付平台自动向服务器请求,步骤5是玩家点击“返回商家网站”时支付平台请求服务器,如果玩家不点击,这可能不会触发,所以这是一个不可靠的请求。支付的安全问题主要发生在步骤3和4中。下面是详细说明:在步骤3中,客户端需要把订单信息提交给支付平台,比如玩

2013-12-16 16:53:43 4267

原创 充值系列——充值系统业务逻辑层实现(三)

x

2013-12-12 13:51:09 5888 2

转载 关于HTTP协议中的KeepAlive属性

首先就看一下KeepAlive出现的原因吧:当一个客户端向服务器发送http请求时,两者之间会建立一个tcp连接,然后服务器发回响应信息同时关闭连接。如果请求的的页面中含有别的资源连接,比如图片、flsah等,就会再次创建连接。KeepAlive的作用就是在第一次创建连接时,服务器会把这个tcp连接保持一段时间(服务器端会有一个keepaliveTime的最大时间,超过时间就断开连接)。这样就

2013-12-06 09:42:52 3523

原创 memcache系列---缓存代理类的实现(二)

在项目中可能会使用到多种缓存技术,如memcache,redis,文件缓存等。如果能把这些缓存机制统一接口,对外开放,让使用者可以不用关心缓存的内部实现就可以随意调用这些缓存类。比如我要使用memcache把key=>value保存在static_zh这台memcache服务器上。我期望的实现方式是: F('Memcache')->static_zh->set('key', 'value');

2013-12-03 15:14:43 1845

原创 memcache系列——memcache客户端类的实现(一)

一个memcache类的具体实现过程:class Core_Memcache { private $_cache; private $_isMemcached; private function _connect() { if ($this->_cache != null && is_object($this->_cache)) {

2013-12-01 23:18:01 1554

原创 充值系列——充值系统的架构(二)

上一篇文章主要介绍了充值系统的基本概要说明和数据库设计。这篇文章主要讨论充值的基本流程和系统架构。简单来说,充值的基本流程就是:玩家选择一个支付平台,选择这个平台下面出售的某个商品,付款成功后玩家会得到所购买的商品。数据交互图玩家客户端指的是浏览器或者SDK。上面数据交互图中需要有几点注意:(1)玩家客户端,游戏服务器,支付平台这三者之间扮演的角色需要注意的是,游戏

2013-11-25 18:26:20 10535

原创 充值系列—充值系统数据库设计(一)

在我们的游戏充值模块中,接入了支付宝,苹果,Paypal, googleplay , mycard, mol, 360,机锋,91等各种充值渠道。这篇文章(包括接下来的几篇文章)将对充值系统的需求,构架,充值执行流程,安全处理,各种渠道的详细接入方式等各个方面做出详细的说明。一方面对目前做的工作作出一个总结,方便以后代码的复用,另一方面,可以给需要做充值模块的同学一点参考资料。      充值

2013-11-25 15:36:45 21688 1

原创 不确定因素对游戏的影响

可能大家也主要到,随着双11的到来,各大电商都忙着展示自己的优惠政策,各种福利红包满天飞,很多商家都使用了游戏的方式来发放福利,这些游戏的规则或多或少使用到了概率事件,考验了玩家的运气和耐心。(电商采用游戏化的手段,说明了游戏不仅仅只是电子玩物,它真的可以渗透于我们生活的各种环境中)。坦白来说,我个人不大喜欢游戏中这样的“不确定设计”,在我喜欢的游戏中,我比较钟爱操作性强的类型,比如实况足球。

2013-11-05 20:57:05 1718

原创 memcache系列--处理缓存的三种方案(三)

这篇文章主要讨论的问题是:如何为项目设计一个完整而简洁的缓存系统。在我们项目中,使用到了三种方法,来保证了缓存系统的有效简洁。只讲使用,不讲原理。1) 第一种,最常见的方式 读取数据的主要步骤如下:1)先从缓存中获取数据(如果在缓存中获取到,则直接返回已获取的数据)2)如果获取不到,再从数据库里面读取相应的数据        3)  把获取到的数据加入缓存中注意:这种方式是在M

2013-10-21 22:49:02 2736

原创 设计模式系列:策略模式在战斗结算中的运用

先给一个设计原则:多用组合,少用继承。这就话就是策略模式的精髓了。下面结合我们项目中的实际问题,详细说明策略模式的使用。1.1 战斗结算在游戏战斗模块中,战斗结果结算是一个很复杂的问题,在我们的项目中,对于不同的战斗类型有不同的结算方式,例如:1)玩家之间的战斗过程中,玩家的装备有几率的摔坏,如果战斗胜利,可以抢夺对方的道具,银币。如果胜利方触发了“战斗结算技能”,还有更多额外的奖励。

2013-10-19 15:12:23 1970

原创 平行实景游戏——生活就是游戏

在游戏改变世界一书中有这样的一个词汇:平行实景游戏。可能你对这个名词很陌生,因为一提起游戏,我们就会想到电子设备上的游戏。但如果你玩过真人cs,相信你可以很快理解平行实景游戏的意思。平行实静游戏就是指在现实生活中进行的游戏,和普通游戏截然不同的特点是,你玩此类游戏不是为了逃避现实生活,而是更友好,更具有目的性的接近真实的生活。在我看来,它的本质就是,生活就是许多场游戏。说实话,现实的生活往

2013-10-11 00:53:36 3464 1

原创 异常处理的实现

异常的定义异常用于处理用于指定的错误发生时改变脚本的正常流程。理解这句话需要知道两点:什么是程序指定的错误,什么是改变脚本的正常流程。指定的错误不同于语法错误,或者程序逻辑错误,它是一个特殊约束性事件。如在游戏中用户购买东西时金币不足,就是异常。这个事件虽然不是程序的语法错误,但我们需要特殊处理。使用其他程序模块处理这个异常的动作就叫做 改变脚本的正常流程。处理异常实现异常处理

2013-10-09 22:47:29 1231

原创 用户登陆优化网络异常的处理

用户登陆的详细过程见此文:http://blog.csdn.net/looksunli/article/details/9799395开发过程中,发现这样的一个问题:重现做法:用户双开两个页面,一个用于登陆游戏,一个用于注册游戏。首先用户注册,注册成功后,再在另一个页面登陆。结果是登陆不成功。理解这个做法,需要明白的如下几点:1)登陆使用ajax请求。 // 登陆按钮

2013-09-29 17:09:53 1399

原创 问卷调查模块实现的过程中的历程

目前,游戏已经到了收尾阶段,为了配合公测,特意做了一个问卷调查模块,用于收集玩家对游戏的反馈。下面使我们的设计历程。设计之初,我们曾经想过使用数据库保存,为了实现这个模块将增加配置库里2-3个表,因为考虑到这个模块属于不大重要的模块(一次性使用),这样做增加了数据库的维护了成本,我们的游戏的配置表已经很多了很多了。于是我们使用文件来保存问卷调查的配置信息:题目的类别: 1: 单选;2:

2013-09-17 21:52:10 2188 1

原创 加密算法中的加盐值

在应用中,出于到安全的考虑和数据的保密,需要使用到加密算法,有时候为了让加密的的结果更加扑朔迷离神鬼莫测一些,常常会给被加密的数据加点“盐”。说白了,盐就是一串数字,完全是自己定义的,不多说,上实例。 /** * 获取当前用户盐 * * @param string $extraKey 额外密钥 * @return string */

2013-09-12 18:15:44 9416 2

原创 PHP处理海量数据实战

看了July的一些关于Java处理海量数据的问题研究,他的想法独到深刻,很值得我们学习。http://blog.csdn.net/v_july_v/article/details/6685962wally_yu选择了其中的一道题验证,具体题目如下:海量日志数据,提取出某日访问百度次数最多的那个IP。July给出的解决方法如下:方案1:首先是这一天,并且是访问百度的日志中的IP取出来

2013-08-28 20:06:02 2264 2

原创 PHP解决羊生羊的问题。

面试题一:农夫有一只羊,这只羊2年后会生一只小羊,5年后羊会死亡,生出来的小羊也是这个规律,2年生一只小羊,5年死亡。问10年后,这个农夫会有多少羊。这是一个程序题,如果面到这个题目的时候,我们千万不能从数学的角度去考虑这个问题。我们从程序的角度考虑,只需要记录每只羊的年纪,mod/2,他的年纪到了2的倍数就生一个小羊,超过了5年,就杀死他。 // 记录每只羊的编号和年龄

2013-08-27 16:10:11 2248

原创 PHP实现 约瑟夫报数问题

有10个人报数,从1,2,3开始报,但有人喊道3时,退出。然后从退出的后面一个人开始重新报数,数到3的人又退出,知道剩下最后一个人。 $inCir = array(); // 如果有10个人, 每个人都在圆圈内 for ($i=1; $i<=10; $i++) { $inCir[$i] = 1; } $countPeople = cou

2013-08-27 14:52:42 1227

原创 卡牌游戏战斗系统的设计和实现(三)

上一篇文章,我主要是从全局的一个角度,架构了战斗系统,这里我将详细分析具体的实现细节。这场战斗中,我们需要关注的点:战斗前期准备,单次战斗结算, 技能释放,战斗结算。战斗前期在航海类游戏中,参战的首要条件是,你必须是出海状态,然后检测你的参战资格,例如你的生命值不能低于25HP,然后初始化玩家对象,玩家的舰队,玩家的船长等。具体的流程图如下:这里需要注意的的有如下几点:

2013-08-17 19:11:52 3968 5

原创 卡牌游戏战斗系统的设计和实现(二)

在一篇文章中,我更多的是从游戏理论的角度,讨论了战斗的系统的设计。这篇文章中,我将从程序的角度,以一款航海类游戏为例,实现战斗系统。在航海类游戏中,战斗角色是出海的船只,一次出海的船只的数量有限定,船只可以装配火炮,护甲,船帆等装备,船只还可以通过装配船长来获取技能。技能的发动是有概率的。战斗规则是,在20个回合内,如果把对方所有的船只击沉,即赢得战斗胜利,否则未平局。战斗流程大致是这样:

2013-08-17 16:46:56 4547

原创 卡牌游戏战斗系统的设计和实现(一)

战斗系统是是卡牌类游戏的一个核心模块,可以说其他的模块都是为此提供服务,不管是角色的强化,合成,或者战斗装备道具的升级,都是为了战斗系统能够更好地游戏体验。战斗模块游戏体验,也完全契合游戏的三大特征:1 目标:指的是玩家努力的方向,他吸引了玩家的注意力,不断的调整玩家的参与度,给玩家提供了一个明确的方向。在战斗模块的体现就是,以求通过自生的努力来战胜甚至秒杀对方,赢得战斗的胜利。2规则

2013-08-17 14:19:55 7532

原创 更新线上项目中的CSS,JS文件的实现

更新已经上线的项目中的某些CSS,JS文件的时候,我们需要考虑到缓存问题导致的更新的文件无法立即生效。特别是某些项目使用到了CDN缓存项目,这样更新项目的文件的时候,必须保证原来CDN缓存的文件失效。如何实现这样的功能,保证每次类似于CSS,JS文件更新的时候立即生效?思路是这样的,我们修改了项目中某个CSS文件的内容,则同时修改CSS的文件名,并且,页面引用这个CSS文件的时候,改变引用

2013-08-09 16:53:32 2640

原创 使用cookie做用户登录的过程详解

不管是游戏,还是网站,最基本的功能,就是用户注册登录。 或许,我们做过多次用户的登陆注册的功能,但我们是否想过,为什么要实现用户的登录。用户怎样做才算登录成功。对用户而言,登录后,就有了他的一片“天地”,例如,登录CSDN后,就可以管理自己的博客,否则,你没有权利管理。关于是否登录成功的问题,在用户看来,如果用户名和密码输入成功,就算登入成功,否则,登录不成功。但这一切,在程序中是怎样

2013-08-07 20:05:42 44282 5

原创 游戏成就系统的实现

在游戏系统中,我们需要给玩家设计出一个成就系统,给玩家设定目标,同时满足玩家的荣誉感。获得成就需要一定的条件,也就是,玩家需要完成某种指定的动作后,才可以获得需要的成就。

2013-08-01 21:52:19 7781 1

原创 同步数据库

游戏,有的中文,英文两个语言版本,所以,游戏有2哥静态资源配置库,分别是中文配置库和英文配置库。有这样的一个需求,如果数值策划修改中文静态资源配置库,例如,他修改了某一条数据,那么,此时应该把修改的内容同步多英文静态资源配置库中。同步的时候,需要注意这样的问题:如果修改中文数据库里面的某一条记录,同步到英文静态库的时候,使用update函数,需要注意的时候,类似于name, d

2013-07-23 19:38:44 1106

原创 游戏中,常见时间处理函数

在游戏聊天,消息等模块中,我们需要记录消息距离当前时间已经过了多久。就类似于微信中,消息的记录时间可能是这样  :12月25号,那就说明这条消息是12月25号产生的。 需求是这样的:记录消息产生的时间距离当前时间  不超过一分钟的时候,显示过了XX秒  不超过一个小时的时候,显示过了几分钟  不超过一天的时候,显示为XX:XX  超过一天的时候,显示 几月几号

2013-07-19 16:22:53 1046

原创 装饰模式:英雄装配装备

如题

2013-07-19 00:24:23 1526

原创 统计数组中 某个值出现的概率

有这样的一个数组:$arr = array(1,1,2,2,3,3,3,3,3 4,4,); 统计每个Value出现的次数方法1:                   $newArr = array_count_value($arr);                   在使用这个函数的时候,注意,如果被统计的数组过于大,这样的话,需要浪费大量的内存方法2: 

2013-07-16 16:54:07 2252

原创 游戏强化系统的实现

1 强化概述   在游戏中,强化模块是我们经常需要实现的模块,一般来说,强化可以提供装备的等级,属性,或者品质。强化也需要一定的条件,比如银币等。2  强化规则        初始装备的等级为1级        每强化一次,装备的等级提高一次        装备被强化的最高等级为10级       每次强化需要银币,且随着等级的不断升高,所需要的银币数量就增加

2013-07-16 13:07:26 5080

libmcrypt-2.5.8.tar.bz2

linux下的libmcryt安装包,就源码包考入到linux 使用./configure --prefix=指定安装的目录。然后 make && make install 就这就可以了

2012-09-07

vim编辑器的使用说明

vim 的常用命令。适合刚刚学习linux的新手,这里基本上总结了vim的最常用的命令

2012-08-26

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除