游戏服务器开发专栏
记录自己在游戏服务器开发中的一些心得体会,以及分享一些自己在服务器开发领域的创新。
帘卷西风
对技术执着有代码洁癖希望和志同道合的人一起互相学习分享
展开
-
linux利用shell实现守护进程的脚本
转载请注明出处:帘卷西风的专栏(http://blog.csdn.net/ljxfblog)在游戏开发领域,服务器宕机那是家常便饭。本文简单介绍如何利用linux的shell脚本实现简单的守护进程。Shell代码如下#!/bin/sh#添加本地执行路径export LD_LIBRARY_PATH=./while true; do #启动一个循环,定时检...原创 2016-07-26 15:13:03 · 20261 阅读 · 4 评论 -
linux的一些运维指令和技巧
转载请注明出处:帘卷西风的专栏(http://blog.csdn.net/ljxfblog)最近一段时间加强了对liunx的学习和实践。学到了一些不错的技巧和方法。切实感觉到了linux一切皆文本的的魅力。最近一周开启轻测,抽时间记录一下。状态相关查看机器cpu型号: #cat /proc/cpuinfo查看线程占用CPU: #top -H -p pidshell带参...原创 2016-07-26 16:24:14 · 3200 阅读 · 1 评论 -
linux编译zlib库的动态库so
转载请注明出处:帘卷西风的专栏(http://blog.csdn.net/ljxfblog) zlib库是一个强大的通用的开源压缩库,用途比较广,在windows下能够很容易的编译或者拿到编译成功的二进制文件。但是linux下的比较少,本文记录一下如何编译。 zlib官方网站:http://www.zlib.net 首先,下载源码来安装zlib软件包。目前最新的版本是1.2.8。 #wget h原创 2014-12-23 12:12:28 · 8152 阅读 · 0 评论 -
关于linux进程间的close-on-exec机制
转载请注明出处:帘卷西风的专栏(http://blog.csdn.net/ljxfblog) 前几天写了一篇博客,讲述了端口占用情况的查看和解决。 关于linux系统端口查看和占用的解决方案 大部分这种问题都能够解决,在文章的最后,提到了一种特殊情况,就是父子进程中的端口占用情况。父进程监听一个端口后,fork出一个子进程,然后kill掉父进程,再重启父进程,这个时候提示端口占用,用netstat原创 2014-12-02 16:42:41 · 13601 阅读 · 0 评论 -
关于linux系统端口查看和占用的解决方案
转载请注明出处:帘卷西风的专栏(http://blog.csdn.net/ljxfblog) 一直以来,在处理linux服务器的过程中,经常会遇到一个问题,有时候kill掉进程之后,端口被占用,新的进程一直起不来,等几十秒之后才能正常启动。所以一直也没专门来处理这个问题。 最近一周频繁出现这样的情况,等待很近也不能启动新进程,总是提示端口被占用,只有重启机器才能恢复正常,这个简直是个灾难,所以下定原创 2014-11-28 02:44:11 · 5956 阅读 · 0 评论 -
关于mysql常用时间函数
转载请注明出处:帘卷西风的专栏(http://blog.csdn.net/ljxfblog) 最近一直在做游戏后台工具的一些关于数据统计的工作,对于mysql的时间函数用的比较多,但是用过了就忘记了,又容易混淆,所以在此记录一下使用过的函数,以后逐步补全。 1、now(),返回当前的时间格式。 > select NOW(); > '2014-11-24 18:38:17' 2、CURDA原创 2014-11-24 18:56:35 · 2191 阅读 · 0 评论 -
关于mysql存储过程创建动态表名及参数处理
转载请注明出处:帘卷西风的专栏(http://blog.csdn.net/ljxfblog) 最近游戏开始第二次内测,开始处理操作日志,最开始把日志放到同一个表里面,发现一天时间,平均100玩家在线,操作记录就超过13万条,决定拆表,按照日期来保存日志,每天的日志存到一个表里面,然后定期把老的数据导出来备份后删掉。 具体思路是写日志的时候,根据当前的时间决定插入到当天的表里面,如表不存在则创建一原创 2014-11-16 20:36:00 · 11273 阅读 · 2 评论 -
linux编译curl库的动态库so
转载请注明出处:帘卷西风的专栏(http://blog.csdn.net/ljxfblog) curl库是一个很强大的http开源库,c++里面能够很方便的和http服务器交互。 最近项目开始内测,开始接登录和充值的SDK,选择了使用curl库来和第三方http服务器交互。 在windows下还是很容易使用,如何使用的案例比比皆是,而且很容易就找到已经编译好的动态库进行测试,但是最后原创 2014-11-11 22:23:42 · 10751 阅读 · 0 评论 -
关于linux服务器进程监控及自动重启的简单方案
转载请注明出处:帘卷西风的专栏(http://blog.csdn.net/ljxfblog) 本周开始,新手游进行删档封测阶段,前两天表现还好,今天更新后出现几次宕机行为,比较影响玩家的测试和体验,我们的服务器管理系统尚未完善,为了晚上能够预防宕机造成损失,先用一种简单的方案临时顶替一下。 实现原理主要是使用linux提供的crontab机制,定时查询服务器进程是否存在,如果宕机则处理我们预设的...原创 2014-10-22 01:38:19 · 15270 阅读 · 0 评论 -
linux 安装zip/unzip/g++/gdb/vi/vim等软件
最近公司新配置了一台64位云服务器,去部署的时候发现,没有安装zip/unzip压缩解压软件。于是只好自己安装这两个软件,linux最好用的还是yum。两个指令就安装好了。原创 2014-10-14 17:25:48 · 5644 阅读 · 0 评论 -
创建角色随机名字(mysql抽取随机记录)和mysql游标的使用
最近在开发中遇到了一些问题,在此记录一下解决的方法,已作备忘。 1、现在创建游戏角色的时候,基本上都是支持角色名字随机的,以前此功能在客户端用代码实现,然后向服务器请求并验证,后来发现有时候连续几次都失败,所以改成在服务器实现。实现方法主要考虑使用mysql随机查询记录,在网上查了很多方案,然后用在了我们游戏中。 实现方案是,将所有随机名字都插入到一张表中,然后从中随机取一条当前角色表中没有出现过原创 2014-09-25 19:02:06 · 4080 阅读 · 0 评论 -
Linux常用指令
服务器部署会经常用到linux,很多时候都是用的时候上网查一下指令,然后用完过不了多久就忘记了,因此本文记录一些自己常用的linux指令,以作备忘。并不断添加。 1、文件、目录相关 a、cd:切换目录 (#cd /sbin....) b、mkdir:创建目录 (#mkdir test) c、rm:删除文件或者目录(#rm -fr test) d、cp:拷贝文件或者目录(#cp -fr ...原创 2014-09-30 11:54:51 · 2208 阅读 · 0 评论 -
linux安装valgrind
最近服务器程序出了一个崩溃,确定是内存地址访问越界,但是不能定位在哪里,没办法只好用valgrind来跑一下,以前公司的服务器是上都默认安装了,突然发现云服务器上没有安装这个软件,所以记录一下如何安装。 1、下载最新版本的valgrind: http://www.valgrind.org/downloads/valgrind-3.9.0.tar.bz2 解压安装原创 2014-09-11 18:40:17 · 12144 阅读 · 1 评论 -
linux下搭建SVN服务器
最近搞了一台云服务器,尝试部署一些服务器相关的东西,作为开发用服务器,首先考虑搭建的是SVN服务器。记录一下搭建的过程,方便以后查看。 一、安装svn软件,有些云服务器会有安装svn服务器,有些没有。 # yum install -y subversion //在线安装svn # svn...原创 2014-08-06 00:11:12 · 2381 阅读 · 0 评论 -
Linux下rz/sz安装及使用方法
新搞的云服务器用SecureCRT不支持上传和下载,没有找到rz命令。记录一下如何安装rz/sz命令的方法。 一、工具说明 在SecureCRT这样的ssh登录软件里, 通过在Linux界面里输入rz/sz命令来上传/下载文件. 对于某些linux版本, rz/sz默认没有安装所以需要手工安装。 sz: 将选定的文件发送(send)到本地机器; ...原创 2014-08-06 10:02:16 · 110936 阅读 · 6 评论 -
linux下使用yum安装mysql
记录一下linux安装mysql的流程和出现问题的解决。 1、使用yum安装mysql 安装前可以使用mysql指令看是否已经安装mysql。 # yum install -y mysql-server 2、启动和关闭mysql服务 # service mysqld start ...原创 2014-08-06 11:12:59 · 2600 阅读 · 0 评论 -
关于网狐棋牌的数据库
前不久放出了我自己原创 2014-04-06 12:53:12 · 15370 阅读 · 20 评论 -
关于Excel到lua的转表工具
关于游戏项目的配置文件,有很多的方案,有些项目有专业的工具,有些则是直接使用json、xml、csv之类的配置文件,使用lua做配置文件的项目也不少。以上方案各有优势,从程序角度看,我认为lua是最容易解析的配置结构,其他几种相对要复杂一点,读写配置的代码量也比较多。 从我的经验来看,策划是很喜欢直接在Excel中配置游戏数据,我们项目使用lua做游戏逻辑开发,因此需要一个Excel原创 2014-04-08 15:53:00 · 11517 阅读 · 8 评论 -
修改lua的文件加载器,自定义lua文件加载
Lua提供高级的require函数来加载运行库。1. require会搜索目录加载文件2. require会判断是否文件已经加载避免重复加载同一文件。require使用的路径和普通我们看到的路径还有些区别,我们一般见到的路径都是一个目录列表。require的路径是一个模式列表,每一个模式指明一种由虚文件名(require的参数)转成实文件名的方法。更明确地说,每一个模式是一个包含可选的原创 2013-08-26 14:51:59 · 11243 阅读 · 1 评论 -
关于“网游屏蔽字简繁混合”的解决方案
项目最近开始向版署申请版号,反馈的一项修改内容,是聊天屏蔽字库简繁混合未能屏蔽。比如“abc”和“ABC”都能屏蔽,但是类似"AbC”,“aBC”这些不能屏蔽(大小写代替简繁体)。 上网查了下资料,最后的解决方案是,把发送字符全部转为简体,然后在跟屏蔽字库的字符进行比较。 代码实现如下,接口是给lua使用:static int luaA_simplify(lua_St原创 2013-08-26 14:12:17 · 4430 阅读 · 0 评论 -
MySQL存储过程where条件执行失败的问题
前几天对服务器实体做了属性缓存机制,当时测试也没有出现大的问题,昨天有人跟我说,登陆的时候角色等级显示错误,我复测了一下,发现不只是等级错误,进入游戏后角色位置、金钱、经验等数据都错了。 跟踪了半小时,发现是数据库的数据出错了,玩家下线保存角色数据的时候,居然将数据库内所有角色的数据都改了,然后赶紧去看存储过程,但是看不出存储过程的错误。先贴一下存储过程的实现:CREATE原创 2013-08-27 09:37:56 · 4443 阅读 · 4 评论 -
翻转队列的实现
在多线程中,经常会出现这样一种模式,A线程向队列L中push元素,B线程从队列L中pop元素,为了线程安全,必须在A push的时候加锁,然后在B pop的时候也加锁,这是一个典型的生产者消费者模式,这样显然会降低程序的效率。那么怎样来优化这种情景呢? 我们可以使用翻转队列(又称交换队列)来提交这个模型的效率,设计思想是使用2个队列L1,L2,A还是继续向L1中push元素,但是原创 2013-09-09 16:20:26 · 4764 阅读 · 0 评论 -
mysql 大小写敏感的一个解决方案
今天,有同事告诉我,我们游戏登陆的时候,账号和密码没有区分大小写,后来又发现创建账号和角色也没有区分大小写。思考登陆流程之后,应该是Mysql没有区分大小写敏感的问题。 在网上查了一下资料,Mysql支持大小写敏感的解决方案。发现了几种方案。 第一、修改数据库的设置,让Mysql支持大小写敏感,这个方案太激进了,数据库数据太多,这样改保不准会出什么问题。 第二、原创 2014-01-07 11:07:57 · 3247 阅读 · 0 评论 -
关于内存越界的问题
在上家公司的时候,服务器出了一个很郁闷的问题,做压力测试的时候,一旦人数上到1000多的时候,会不定时的出现崩溃现象,虽然崩溃的地方相同,但是和崩溃的起始点已经相差很远,gdb的断点基本上用处不大。 后来在网上查了许多资料,基本上定位是内存地址越界引起,只是不知道具体的越界地点。 当时我做的第一个措施是把所有的sprintf、memcpy,strcpy等相关容易出现内存原创 2014-04-03 17:05:35 · 2816 阅读 · 2 评论