文章系列先介绍环境搭建 介绍redis操作和代码编写运行  这是典型的实战工程过程.那么我们为何要使用redis而不是常规的数据库比如 mysql呢? 因为KV内存数据库最大的优势所有数据全部存储在内存中,速度快,而且key-value的特点也决定了他良好的扩展性. 以下几点作为游戏服务器中的应用示例,更多的使用方法可以在实践中继续探索优化 1 数据库缓存 比如前一章节的用户数据,在mysql进行读写和redis上进行读写在大量并发访问的场景下,差别是很大的.Redis提供了较为丰富数据类型,使…
这里我们尝试在游戏服务器中的数据处理中使用redis 通过该系列文章能够学习 redis的基本操作 源码编译 客户端开源库的编译和使用 以及在游戏服务器中的缓存使用 作为初次摸索 尽量使得环境简单  我们在windows中运行redis进行学习 本来redis是不支持windows的网络模型 但是还是有微软魔改的版本 一个版本地址是 https://github.com/ServiceStack/redis-windows 看说明似乎使用了windows 子系统功能模拟了linux运行redis…
摘要: 搭建了服务器环境 有了客户端 我们来假想下以下应用场景:我们简单举个实例来描述下Hash的应用场景,比如我们要存储一个用户信息对象数据,包含以下信息:用户ID,为查找的key,存储的value用户对象包含姓名userName,密码校验值passwordMD5,手机号码telephoneNum , 微信名称wechatName 等信息.将如何在redis中存储和操作? 搭建了服务器环境 有了客户端 我们来假想下以下应用场景: 我们简单举个实例来描述下Hash的应用场景,比如我们要存储一个用…
上文提到 搭建完成后 我们选择客户端的开源库进行连接 有以下三种选择 1 acl-redis 原因是支持VC 国产  作者博客   acl 框架库简介  用 acl 库编写高效的 C++ redis 客户端应用 代码支持VC编译 最好使用vc2008-vc2012编译,这样工程包含redis的示例. 我选择的是vc2017的工程图标打开工程的,所以没有示例 作者有中文博客 对该库有详细的介绍 还有QQ群可以进行讨论 技术支持比较强大. 但是问题在于 整个工程偏向C风格 居然是用自己的thread…
排行榜游戏服务器中涉及到很多排行信息,比如玩家等级排名.金钱排名.战斗力排名等.一般情况下仅需要取排名的前N名就可以了,这时可以利用数据库的排序功能,或者自己维护一个元素数量有限的top集合.但是有时候我们需要每一个玩家的排名,玩家的数量太多,不能利用数据库(全表排序压力太大),自己维护也会比较麻烦.使用Redis可以很好的解决这个问题.它提供的有序Set,支持每个键值(比如玩家id)拥有一个分数(score),每次往这个set里添加元素,Redis会对其进行排序,修改某一元素的score后,也…
经过多次折腾之后,在一次进行了一次重大的重构,去解决问题 主要重构如下 1.将原来的单一协议修改多协议进行,一些查询.认证的功能都采用HTTP进行,避免全部采用TCP链接资源的消耗: 2.原来单一的部署,划分多个分布式的系统,添加怪物自动管理系统(怪物的刷新,配置等).后台服务系统(游戏过程中逻辑数据处理).webAPI查询认证系统(查询和认证).游戏后台辅助系统(主要监控其他项目的运行情况,用于容灾处理).缓存服务器(redis).数据服务器.资源服务器(配置文件): 现在基本解决了原来出现的…
本人80后程序猿一枚,原来搞过C++/Java/C#,因为工作原因最后选择一直从事C#开发,因为读书时候对游戏一直比较感兴趣,机缘巧合公司做一个手游的项目,我就开始游戏服务器的折腾之旅. 游戏的构架是前端unity3d,服务端C#,数据库用SqlService.基础工作做完,就开始动工,因为前期考虑不周,所以暂定使用Http短链接进行,这也是导致后面服务器失败的根本原因之一,下面就说说前期最基础的构架: 就是最基础的构架,但是接下来由于游戏的细化,一些列的问题就出现了: 1.账号登陆的顶号问题如…
在经过上述2番折腾之后,最后决定使用TCP进行通信,所以在一次进行重构 主要重构的要点 1.将过来的HTPP请求,重构为TCP请求: 2.使用组件FluenScheduler进行怪物的定时刷新,和定时处理数据: 3.所有游戏中的数据都保存在缓存服务器中,然后定规.定点的进行数据库操作: 4.在传输过程中,将原来的json转变为压缩后的2进制文件进行传输: 5.共享数据都采用广播,消除了很多轮训的请求: 在重构之后,项目有了明显的好转,CUP和内存的消耗都逐渐下降,但是也遇到一些问题: 1.偶尔会…
1.安装redis [1]下载安装包 #准备安装文件夹 mkdir /usr/local/soft/redis #进入文件夹 cd /usr/local/soft/redis #下载安装包 wget http://download.redis.io/releases/redis-4.0.11.tar.gz [2]安装redis #解压 tar zvxf redis-4.0.11.tar.gz #make之前要安装gcc yum -y install gcc gcc-c++ #编译 cd redi…
经过短时间的折腾,为了解决上述问题,我对游戏进行一些简单的重构,以便能解决当前的瓶颈 添加了缓存服务器进行处理一些及时数据和配置数据,来缓解数据库的压力和IO的压力: 只能说解决当前的暂时性问题,但是测试发现当数据过多也会导致服务CUP和内存消耗比较大,所以还要进行下一步的重构.…
1.下载OpenResty和Redis OpenResty下载地址:wget http://openresty.org/download/ngx_openresty-1.4.3.6.tar.gz Redis下载地址:wget http://download.redis.io/releases/redis-2.8.6.tar.gz 2.安装依赖包 yum install -y gcc gcc-c++ readline-devel pcre-devel openssl-devel tcl perl…
1.下载安装redis 在远程服务器中你想下载的位置执行以下命令来下载redis文件到服务器中 $ wget http://download.redis.io/releases/redis-4.0.9.tar.gz 说明:$是指你的当前目录,不是命令的一部分,wget命令用来下载网上资源,后面的地址是网上资源路径,你可以去redis官网上查找你想下载的redis版本的下载路径 解压文件 $ tar xzf redis-4.0.9.tar.gz 编译文件 $ cd redis-4.0.9 $ ma…
在服务器系统开发时,为了适应数据大并发的请求,我们往往需要对数据进行异步存储,特别是在做分布式系统时,这个时候就不能等待插入数据库返回了取自动id了,而是需要在插入数据库之前生成一个全局的唯一id,使用全局的唯一id,在游戏服务器中,全局唯一的id可以用于将来合服方便,不会出现键冲突.也可以将来在业务增长的情况下,实现分库分表,比如某一个用户的物品要放在同一个分片内,而这个分片段可能是根据用户id的范围值来确定的,比如用户id大于1000小于100000的用户在一个分片内.目前常用的有以下几种:…
用Go语言写游戏服务器也有一个多月了,也能够明显的感受到两者的区别.这篇文章就是想具体的聊聊其中的区别.当然,在了解区别之间,我们先简单的了解一下Go语言本身. 1. Go语言的特点 Go语言跟其他的语言例如Java比起来,算得上一门很年轻的语言.Go语言是由Robert Griesemer.Rob Pike和Ken Thompson于2007年在Google开发.并于2009年正式发布. Go语言的设计理念围绕着简洁这两个字,认为少即是多.如果你熟悉Java,用Java那一套语法命名跟Go做对…
 在网页游戏开发中,绝大多数即时通信游戏采用flash+socket 模式来作为消息数据传递.在开发过程中大多数开发者在开发过程中本地没有问题,但是一旦部署到了网络,就存在连接上socket服务器.究其原因主要是没有部署安全策略文件.在这里我主要说说flash策略文件部署. 1.flash安全策略文件格式 <?xml version="1.0"?> <!DOCTYPE cross-domain-policy SYSTEM "/xml/dtds/cross-d…
在 erlang游戏开发tcp 我们建立起了自己的socket tcp 服务器的基本骨架.当时面对并发情况下,多人同一时刻连接服务器的时候,我们的基本骨架 还是难以应付处理.这就使我不得不想对这样的情况如何去处理.怎么处理呢? 预先开多个线程侦听连接,侦听到有连接后重新开线程处理当前连接,然后继续侦听连接.当然要自己处理这样的事情,也花费不到多少的时间.但是要弄成成熟稳定的骨架估计还是要花费一段时间的.本着不重复造轮子的原则.在这里我找到了大名鼎鼎cowboy使用的ranch. 它已经相当完美帮…
    Erlang最大的优点是方便,很多基础功能都已经集成到Erlang语言中.之前用C++写服务器的时候,管理TCP连接很繁琐,需要写一大堆代码来实现.底层的框架需要写很多代码实现,这样既浪费时间,又会有很多BUG.但是用Erlang就方便多了,底层的一切你都不需要考虑,你只需要考虑,服务器的架构以及业务逻辑.从此让你彻底从底层的泥潭中解脱.我从去年年底开始了解学习Erlang,到现在我已经彻底爱上了Erlang.好了,废话不多说,开始详细介绍下我设计的这个服务器架构吧.     首先看下整…
任务描述 本次集中介绍使用Windows和Linux()搭建本地Redis服务器的步骤,从备份的RDB文件中加载数据,以及如何生成AOF文件和通过AOF文件想已经运行的Redis追加数据. 操作步骤 Windows版本 启动Redis-server 1:下载Redis for Windows的压缩包或者安装文件,此处通过下载zip文件作为示例:https://github.com/microsoftarchive/redis/releases 2:解压压zip包到本地Redis目录,通过CMD命…
通常来看,Redis开发和运维人员更加关注的是Redis本身的一些配置优化,例如AOF和RDB的配置优化.数据结构的配置优化等,但是对于操作系统是否需要针对Redis做一些配置优化不甚了解或者不太关心.然而事实证明一个良好的系统操作配置能够为Redis服务良好运行保驾护航. 1.内存分配控制 1.vm.overcommit_memory Redis在启动时可能会出现这样的日志: # WARNING overcommit_memory is set to 0! Background save ma…
Scut游戏服务器免费开源框架--快速开发(3) Scut快速开发(3) 1        开发环境 需要安装的软件 a)        消息队列 b)        数据库,Sql2005以上版本 c)        VS2010开发工具(.Net Framework 4.0以上) 2        代码框架 项目划分三层:实体层,组件层,业务逻辑层(脚本层):模型层主要是数据实体映射,自定义缓存结构:组件层主要负责实现中层层扩展功能:业务逻辑层主要负责实现游戏功能: 2.1     数据库创…
GoWorld代码:https://github.com/xiaonanln/goworld Golang具有运行效率高.内存安全等优良特性,因此是非常适合用来进行服务器开发.使用Golang开发游戏服务器有如下的优点: 运行效率远高于各种脚本语言,大幅度提升服务器承载能力 内存安全,不会像C++服务器那样出现内存错误导致服务器down机 Goroutine能够很好地利用多核计算能力,提升承载能力 Golang本身非常简单好用,大家都喜欢 然而使用Golang编写游戏服务器也面临一定的困难,主要…
关于mongo的思考 第一阶段的弱联网游戏已基本完成,截至今天下午,测试也基本差不多了,前端还有一些小bug需要优化,接下来会接入小米,360,百度,腾讯等平台,然后推广一波,年前公司还能赚一笔,而我,也即将准备做下一款SLG.上一次,我第一次尝试了Netty,并且也着实感受到了Nio的魅力,Netty的魅力,在做的过程中也学到了很多有用的东西,这一次,在数据持久化方面,我思考了很久,我越发的觉得,我即将做的这款游戏的数据用nosql来存储更合适,甚至是之前做的那款弱联网游戏的存储,我也认为似乎…
又是一个美好的周末啊,现在一到周末,早上就起得晚,下午困了又会睡一两个小时,上班的时候,早上起来喝一杯咖啡,然后就能高效的工作一整天,然而到了周末人就懒散了,哈哈. 最近刚跳槽,到新公司已经干了有两周时间了,这两周时间是过得比较充实的,因为这家新公司是个小公司,以前以单机开发为主,服务器方面我一个人,做两个游戏的服务器开发工作,当然,一个很简单,另一个就相对复杂点,简单的那个是个弱联网游戏,服务器只需要做好数据存档和登录支付验证就好了,而另一个,则是相对复杂的slg游戏,我感觉这是又一款cok,…
在今年 1 月由七牛云主办的 ECUG Con 十周年盛会上,真有趣技术总监陈明达带来了题为< Go 在游戏行业中的工程实践>的精彩分享,深入讲解了 Go 的工程经验,错误和异常处理,interface 的应用以及去 DSL 的尝试等内容,以下是对他演讲实况的记录. 陈明达 真有趣技术总监.从事游戏行业,开发过<神仙道><仙侠道>等项目. 先从工程说起 软件工程三要素 我创业后,总结了过往工作和创业过程中参与的项目,发现不论做什么,软件工程都回到三个问题上: 需求.首先…
在游戏开发中,我们经常会遇到一些技术难题,而其引发的bug则会影响整个游戏的品质.女性向手游<食物语>就曾遇到过一些开发上的难题,腾讯游戏学院专家团Wade.Zc.Jovi等专家为其提供了指导和帮助.过载保护.集群.服务器通信.并发选型等方面的问题,是中小团队常常的技术难题,本文分享了一些专家在坐诊过程中遇到的游戏服务器常见问题解决方法,希望对大家有所帮助. 问题一:玩家登录时拉取好友信息,但好友服务繁忙导致登录失败. 解决方法: 1.分离关键路径上非关键调用,缩短事务流程,避免周边服务异常阻…
项目初探 项目地址: 原项目:https://github.com/lonng/nanoserver 调过的:https://github.com/Kirk-Wang/nanoserver 这将是一个完整的,完全践行 DevOps/GitOps 与 Kubernetes 上云流程的 Golang 游戏服务器开发的系列教程. 这个系列教程是对开源项目 Nanoserver 的完整拆解,旨在帮助大家快速上手 Golang(游戏)服务器后端开发.通过实践去理解 Golang 开发的精髓 -- Shar…
redis是现在主流的缓存工具了,因为使用简单.高效且对服务器要求较小,用于大数据量下的缓存 spring也提供了对redis的支持: org.springframework.data.redis.core.RedisTemplate 为了在springmvc环境中使用redis,官方推荐是和jedis结合使用,由jedis来管理连接这些 首先进行整合配置 1.properties文件 #############Common Redis configuration cache.redis.max…
(原创出处为本博客,http://www.cnblogs.com/linguanh/) 目录: 一,下载 二,解压 三,配置与启动 四,测试 Redis 五,配置 phpRedis 扩展 六,综合测试 前序  Redis是一个开源,先进的key-value存储,并用于构建高性能,可扩展的Web应用程序的完美解决方案.  Redis特点:   1,Redis数据库完全在内存中,使用磁盘仅用于持久性. 2,相比很多键值数据存储,Redis拥有一套较为丰富的数据类型 3,Redis可以将数据复制到任意…
h2:first-child, body>h1:first-child, body>h1:first-child+h2, body>h3:first-child, body>h4:first-child, body>h5:first-child, body>h6:first-child { margin-top: 0; padding-top: 0; } a:first-child h1, a:first-child h2, a:first-child h3, a:fi…
Redis是一个用的比较广泛的Key/Value的内存数据库,新浪微博.Github.StackOverflow 等大型应用中都用其作为缓存,Redis的官网为http://redis.io/. Redis 是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(sorted set --有序集合)和hash(哈希类型).这些数据类型都支持push/pop.add/remove及取交集…