游戏服务器,登陆认证


    写这些东西,纯属是在学习的时候的一些笔记,或者是自己的认识,或者是在资料上看到的好的论点,发现有的时候如果不把这些东西记下来,后来再忘记掉,真的是很划不来的一件事,本来是打算记在笔记本上,但是最终觉得记在这里会更好,也许对别人会有所帮助.真的是第一次写帖子,大家多包涵~~~



这一篇的主题是介绍一个网络游戏的登陆认证过程


 1. 概述

     网络游戏 通常都需要进行账号登陆管理,验证账号及密码,进行上线下线记录以及计费等等,那么这个过程是怎么实现的呢,其实原理上是很简单的,就是当客户端向游戏服务器连接之前,先和账号登录服务器连接[当然,也有一种情况是客户端直接和游戏服务器相连,然后游戏服务器作为客户端的代理向 账号 登录服务器进行验证],然后通过验证后,获取游戏服务器的列表,由玩家自行选择进入那个游戏服务器。

     从上面的描述中,可以看出来一个 账号 登录服务器的职责:

     1. 管理账号

     2. 验证账号

 

     1. 管理账号,就是账号的产生,管理,删除。这里并不是讨论的主题,但是为了便于大家理解和后面的说明,在这里做一个简要的说明,账号一般都是用数据库来管理的[什么,你说用txt来记录?:(],通常去网站上注册一个什么账号啊,通信证啊,一卡通啊,差不多都是同一件事,就是向账号数据库中的账号表里面插一条记录,账号表的结构也是大同小异,比如

         create table 'account'

         ( 'id', bigint(20) unsigned NOT NULL auto_increment,

           'accountname' varchar(32) NOT NULL,

           'password' varchar(32) NOT NULL,

           'email' varchar(32) NOT NULL,

           PRIMARY KEY('id')) ENGINE=MyISAM;

          如果你看出来我会点MySQL,你就是对的~~~呵呵,那么,你按照注册网站千篇一律的流程痛苦的填完N多资料以后,比如


          账号名称: 我就是我

          密码      : ooxx

          E-mail   : 我还是我@猪猪.com


          点击确定,那么实质上只是执行了一条SQL语句

          insert into account( 'accountname', 'password', 'email' ) values( 我就是我, ooxx , 我还是我@猪猪.com ),就是这么回事,你就算有一个账号了,好了,再说的话我真要离题了

 

      2. 验证账号,你通过上面的注册,已经拥有了一个账号了,那么现在想进入游戏,只要输入相应的账号和密码即可,但是,一般来说这里还有很多的细节要处理,大部分服务器使用状态机变迁来描述登陆这一过程,实际上 状态机处处存在

          光是描述原理,显得过于简单,大家会觉得一听都懂,甚至是太简单,抱着学习的态度,我就用 常见的WOW 开源项目 Mangosd的realmd server来讲解,因为这个代码大家都能得到,看完文章可以去看看代码,这样就明白了, 登陆状态逻辑图如下

   

    事实上,它分为三个过程,你在自己的机器上启动wow客户端,它就和RealmServer建立起一个连接,然后向 RealmServer发送一个 AUTH_LOGON_CHALLENGE_C数据包, RealmServer进行账号合法性验证,然后向客户端发送验证结果,如果通过验证,客户端再向RealmServer发送 AUTH_LOGON_PROOF_C数据包,进行密码验证,并向客户端 发送验证结果,如果通过验证,客户端会发送 AUTH_LOGON_REAlMLIST_C来请求可用的服务器列表,收到 RealmServer 发来的游戏服务器列表后,玩家就可以选择一个合适的游戏服务器登入游戏了。

 

    在RealmServer使用的MySQL数据库,其中的realmd数据库是 用来管理账号的,他包含有几张表,在附录中有简单的描述。

    下面是更详细的描述,如果要结合代码来看的话只要关注 /trunk/src/realmd/AuthSocket.cpp就行了,OnRead函数中有状态的分派,是用函数指针数组实现的,这是一种惯用法,或者直接copy下面的网址到IE浏览器中 https://mangos.svn.sourceforge.net/svnroot/mangos/trunk/src/realmd/AuthSocket.cpp,记住,如果是初学者,一定不要一口吃个大胖子,减少自己在一个时间段的关注量有利于知识的理解和学习,同一时刻关注太多的东西会打击人的信心,而且分散注意力


    状态一: AUTH_LOGON_CHALLENGE
        1. 上行包结构
        struct AUTH_LOGON_CHALLENGE_C
        {
            uint8   cmd;         // 协议
            uint8   error;
            uint16  size;
            uint8   gamename[4];
            uint8   version1;
            uint8   version2;
            uint8   version3;
            uint16  build;
            uint8   platform[4];
            uint8   os[4];
            uint8   country[4];
            uint32  timezone_bias;
            uint32  ip;
            uint8   I_len;
            uint8   I[1];      //这里是账号名
        };
        这个结构体很简单,成员基本上看名字就知道什么意思了,重要的是cmd成员[它的值为AUTH_LOGON_CHALLENGE],它标示出该上行包应该由AuthSocket::_HandleLogonChallenge()协议处理函数来处理
        2. 协议处理函数流程
           1. 检查IP是否处于冻结状态
           2. 检查账号是否处于冻结状态
           3. 向Client发送验证结果

    状态二: AUTH_LOGON_PROOF
        1. 上行包结构
            struct AUTH_LOGON_PROOF_C
            {
                uint8   cmd;
                uint8   A[32];
                uint8   M1[20];
                uint8   crc_hash[20];
                uint8   number_of_keys;
                uint8   unk;
            };
            这个上行包的作用是密码的验证,cmd成员[它的值为AUTH_LOGON_PROOF],由AuthSocket::_HandleLogonProof()来处理。

        2. 协议处理函数流程

            1. 进行密码验证

            2. 如果验证成功,会更新account表中的last_ip, last_login等字段,并通知客户端。

    状态三: REALM_LIST
         1. 上行包结构
              这个包的结构不重要,但是可以肯定的是其结构如下
             struct AUTH_LOGON_REAlMLIST_C
             {
                uint8   cmd;
                ····
             };
             这个上行包的作用是请求realmlist,也就是ServerList,以获取服务器列表,cmd成员[它的值为REALM_LIST],Server会返回一个游戏服务器的列表其中包含各个游戏服务器的装态,本账号在该服务器的角色数量等信息,其实这个并不能算做是一个认证状态,真正的认证状态在AUTH_LOGON_CHALLENGE和AUTH_LOGON_PROOF就已经已经确定了下来,这个上行包只是用来请求ServerList而已。

 

 

     至于客户端是怎么连接上RealmServer的,RealmServer怎么管理多个并发的客户端的链接和通信的,在这里就不细说了,只能是简单的在这里提一下,我看的Mangosd的版本里面,使用的是select模型~~这个简单易懂,但是大家都知道它的缺点,虽然说是并发的获取了IO事件,但是事件的处理过程却是依次同步的,连接越多,IO事件越多,它就越慢~~~而且还有一个进程里面监听句柄数量的限制,不过新的Mangosd里面已经使用了ACE,但是我觉得初学还是看select版本的比较好,比较ACE又会给你的学习带来不小的负担,网络这部分以后也会慢慢的讲解~~呵呵,希望大家支持

 

附录:RealmServer使用的表

1.  account  账号表

关键字段介绍:id  全局唯一的标示

  username        账号名

  sha_pass_hash   账号密码密文

  gmlevel         GM账号等级 [0~3( 最高级别 )]

  joindate       账号创建时间

  online         在线标志位 [ 玩家在线时为 1]

  mutetime       禁言时间

 

2.   account_banned 冻结账号表

关键字段介绍:id account      表中对应的 id

  bandate         冻结开始时间[ 以秒记 ]

  unbandate      解冻时间

  bannedby        冻结方式

  banreason      冻结原因

  active         解冻标志 [0 为解冻,默认为 1]

   Ps : 玩家在冻结时间过后登陆时会把 active 置为 0

 

3.   ip_banned 冻结 IP 表

   关键字段介绍:ip ip地址

 bandate          冻结开始时间[ 以秒记 ]

 unbandate       解冻时间

 bannedby         冻结方式

 banreason       冻结原因

 

4.   realmcharacters 玩家角色数量统计表

   关键字段介绍: realmid          GameSeverId[对应于 relmlist 中 GaveServer 的 id]

  acctid         账号Id[ 对应于 account 中的 id]

  numchars        角色数量

   Ps : realmid是在 mangos.conf 中配置的

 

5.   realmlist GameServer列表

   关键字段介绍: id              GamesServer的唯一标示

  name            GameServerName

  address        GamServerIP

  port           GameServerPort

  icon            据说是GameServer 的 Type , PVPorPVE

  color           据说等于2 的时候标示 GS 不在线,黑色选不中

  timezone       GS类型,分国家

  allowedSecurityLevel 安全等级,和登陆的玩家的权限有关

  population      GS人数百分比



更多相关推荐


数据库char vchar nchar nvchar的区别

发布时间:2021-12-01 SQLSERVER SQL 数据库 C#
定长:当输入的数据长度没有达到指定的长度时将自动以英文空格在其后面填充。var前缀:表示实际存储空间是可变的Unicode:数据库中,英文字符只需要一个字节存储就够了,但汉字和其它众多非英文字符,则需要两个字节存储。如果英文与汉字同时存在,由于占用空间数不同,容易造成混乱,导致读取出来的字符串是乱码。 为了解决这个问题,产生了Unicode字符集,Unicode字符集所有的字符都用两个字节表示,即...

测试划分

发布时间:2018-11-19 测试 后端 数据库
单元测试:  是测试过程中最小的粒度,在执行过程中紧密的一招程序框架对产品的函数和模块进行测试,包括入口和出口函数,输入输出信息,错误处理信息部分边界值测试集成测试:  由于模块相互调用时接口会引入许多新问题,所以即使模块单独可以运行集成后在一起却不能正常工作。集成测试包括:增量式集成和非增量式集成;增量式集成分为:自顶向下增量式测试(桩程序)自底向上增量式测试(驱动程序)。测试重点是模块间的衔接...

35 个让你的代码变得糟糕的不良习惯

发布时间:2017-05-05 数据库 开发工具 JAVA
坏习惯很难改变,如果你不知道你的坏习惯正在影响工作,那就更难。如果你知道,但不在乎——这是最糟糕的情况。但好在你已经来这里看了,不是吗?作为一个程序员,我看到很多不好的做法,不仅仅与代码相关,还包括团队合作能力。我自己曾经就有不少这些坏习惯。这里是我认为最糟糕的35个坏习惯,它们涵盖了四大类:组织代码、团队合作、编写代码以及测试和维护。组织代码说“我稍后会改”推迟修复代码这个习惯不仅仅涉及到优先级...

Python 使用第三方库 pymysql 连接数据库教程

发布时间:2021-11-10 DATABASE PYTHON 数据库
python连接数据库pyton连接数据库需要先安装pymysql模块打开cmd窗口输入pipinstallpymysql安装完成后导入pymysql模块:importpymysqlpython连接数据库主要分五个步骤:step1:连接数据库step2:获取数据库的游标step3:在游标中来执行sql语句step4:关闭游标step5:关闭连接————————————————A)连接mysql数据...

Linux学习(三)用户及系统管理

发布时间:2021-06-14 LINUX CENTOS 运维 UBUNTU 服务器
关机重启指令关机shutdown默认一分钟后自动关机shutdown-tnow立刻关机shutdown-h1一分钟后关机halt效果等价于直接关机重启shutdown-rnow立刻重启reboot立刻重启syn把内存数据同步到磁盘每次关机或者重启之前应当执行syn同步内存数据到硬盘用户登陆与注销每次登陆时候尽量避免使用root用户登陆,root用户权限太高,防止误删文件用户切换su用户名用户注销l...

命令行导入导出数据文件

发布时间:2015-11-16 MYSQL 数据库
       为支撑数据量,引入了MyCat做为分库,分表的代理持久层代理,MyCat在语法上不支持Mysql的语法。     Mycat数据导入需要带有插入声明的列:导出命令:1.通过doc进入到mysql目录下如:C:\ProgramFiles(x86)\MySQL\MySQLServer5.1\bin>mysqldump-uroot-p-h127.0.0.1-P3306-p-c-t--...

最全MySql知识整理 一

MySQL整理数据库概念ACIDACID是事物的四个特性。分别是原⼦性(Atomicity)、⼀致性(*Consistency)、隔离性(Isolation)、持久性(Durability)。原⼦性是指事物是⼀个不可分割的⼯作单位,事物中的操作要么都发⽣,要么都不发⽣。最经典的就是转账案例,我们把转⼊和转出当做⼀个事物的话,就需要在SQL中显式指定开启事务。⼀致性是说数据库事务不能破坏关系数据的完...

linux运维--用户管理

发布时间:2021-04-14 运维 LINUX LINUX运维基础 服务器
1.vim编辑器(全)//末行模式下1.1翻页(b/f):ctrl+b:(上翻)*ctrl+f:(下翻)*1.2删字符(x/p):x:(删一个字符)*nx:(删光标处及后n个字符)*xp:(光标处和后一个字符换位置)#速度要快,否则成删除了np:(输出n个p字符)1.3删除命令(d):d+$:(删除光标及其行尾的内容)#右删*d+^:(删除当前位置以及到没有空白处)d+0:(删除绝对行首)n+dd...

Linux运维--Linux下数据库的基本管理

发布时间:2019-11-21 LINUX 运维 数据库 MYSQL PHPMYADMIN
一、mariadb数据库的安装1安装yuminstallmariadb-server-ysystemctlstartmariadb安装后即可直接用命令mysql访问:mariadb数据库的配置文件是/etc/my.cnf,数据目录在/var/lib/mysql/2安全初始化默认情况下,数据库的网络接口是打开的,为了安全需要关闭此接口netstat-antlupe|grepmysql #查看数据库...

软件测试工程师薪金待遇大比拼

在大型的软件开发企业中,作为软件质量控制中的重要一环,软件测试工程师基本处于“双高”地位,即地位高、待遇高。同时,软件测试的人才需求缺口超过20万人。可以说他们的职业前景非常广阔,而人才的紧缺也促使软件测试工程师的薪资逐渐走高,高级测试工程师年薪可高达10万元。从近期的企业人才需求和薪金水平来看,软件测试工程师的年工资还有逐年上升的趋势。测试工程师一般会分为以下几个等级:初级测试工程师、中级测试工...

软件测试工程师职业生涯规划

发布时间:2015-02-05 测试 操作系统 数据库
 第一阶段:(测试员)初级测试工程师自身条件:初入行具备计算机专业学位或一些手工测试经验的个人。具体工作:执行测试用例,记录bug,并回归测试,通过qtp等测试工具录制回归测试脚本,并执行回归测试脚本。学习方向:开发测试脚本并且开始熟悉测试生存周期和测试技术。第二阶段:(测试工程师)程序分析员自身条件:有1~2年工作经验的测试工程师或程序员。具有初步的自动化测试能力,完善自动化测试脚本。具体工作:...

远程连接MySQL数据库1130错误解决方法以及相关知识学习

发布时间:2021-09-27 MYSQL 数据库 NODE.JS
问题描述在进行MySQL数据库的远程连接操作时,出现错误:“ERROR1130:Hostxxx.xxx.xxx.xxxisnotallowedtoconnecttothisMySQLserver”。分析原因问题显示为我们无法连接MySQL服务器,显示不被允许,说明没有访问权限。主要是MySQL服务器端远程连接权限没有对外开放。解决方法通过修改MySQL数据库访问权限即可。使用命令:mysql-ur...

Unity3D学习笔记

发布时间:2019-09-01 游戏
Unity提供的资源商店:www.assetstore.unity3d.comPrefab的使用,用Instantiate函数有3个参数。第一个是需要实例化的预设,后两个分别是游戏对象的位置和旋转角度。给游戏添加声音(音源)AudioSource组建,在AudioClip设置音效。要播放音效需要在OnGUI函数里实现,用GetComponent<AudioSource>()得到音效组建...

关于SQLNET.AUTHENTICATION_SERVICES= (NTS) 的解释

发布时间:2018-06-07 操作系统 数据库
原文转自:http://www.360doc.com/content/12/0207/12/3446769_184740592.shtml   标题所代表的意思为使用操作系统本地验证,一般不用,有安全问题。通常需要改成下面的值:SQLNET.AUTHENTICATION_SERVICES=(NONE) 1.这样就不允许使用操作系统本地验证了,例如: C:\>sqlplus/nolog Sql...

oracle整理

发布时间:2018-07-09 数据库
1、安装oracle数据库2、创建数据库实例(可选)3、创建用户、角色、授权(可选) 查询数据库名:selectname,dbidfromv$database;查询实例名:selectinstance_namefromv$instance;查询数据库域名:showparameterdomain;sqlplus:登陆sys/assysdbacreateuser用户名identifiedby密码;--...

redhat 安装 redis 单机

发布时间:2021-11-05 服务器 REDIS 数据库
备注:文件存放路径为/usr/local,安装包为:redis-4.0.0.tar.gz1. 官网下载安装包,上传安装包到对应路径(rz命令)2.  Tar命令解压,并修改文件夹名称为redis3.  在redis文件文件夹下面执行makeinstall,可能会发生以下问题Cc:commondnotfound -------没有gcc编译器在使用yuminstallgcc-c++ 时候,可能会报n...

API接口文档管理平台搭建--YAPI安装流程

发布时间:2021-11-19 服务器 接口 JAVA API
1.依赖安装    依赖一:java    依赖二:node.js(包含npm),安装指导链接        https://blog.csdn.net/weixin_42396063/article/details/121420975     依赖三:mongodb,安装知道链接        https://blog.csdn.net/weixin_42396063/article/detai...

mongodb 安装 (CentOS 下,默认操作路径为/usr/local)

发布时间:2021-11-19 CENTOS 数据库 MONGODB JAVA
1.官网上传安装包        MongoDB安装包官网地址:MongoDBCommunityDownload|MongoDB2.安装包上传    rz命令上传安装至 /usr/local ,tar-zxvf ***.tar.gz, 重命名为mongodb3.新建数据和日志文件夹    进入mongodb文件夹里面,创建存放数据的文件夹和存放日志的文件夹    数据:mkdir-pdata/db...

(秋招/春招)软件开发/软件测试面试题——数据库部分

1.数据库多表查询leftjoin(左联接)返回包括左表中的所有记录和右表中联结字段相等的记录rightjoin(右联接)返回包括右表中的所有记录和左表中联结字段相等的记录innerjoin(等值连接)只返回两个表中联结字段相等的行2.分组、排序、分页取前10条指令关键字分组查询:groupby;排序:orderbyasc(默认升序)/desc(降序)分页查询:Limit[offset...

登陆、添加、删除、查询模块的测试点

发布时间:2008-02-18 测试 TABLE 数据库
以前在这里看到一篇文章说,要积累各个常用模块的测试点,然后到需要测试的时候就根据这些测试点设计测试用例,我觉得这是一个好方法,就决定总结一下。我的实际经验不多,根据我在论坛中学到的零散的东西和自己的想象,总结出以下几点,欢迎各位继续补充。1.    登陆2.    添加3.    查询4.    删除1.    登陆①    用户名和密码都符合要求(格式上的要求)②    用户名和密码都不符合要求...

一个初级测试工程师的工作总结

发布时间:2008-02-16 数据库 CMM UML SERVLET 测试 工作
本文是我刚毕业那会儿,写给公司的工作总结;今日重拾尘封已久的记忆,也是纵有万般风情,更与何人说!       发到这里,一是将自己的心绪分享给同行朋友们,二来我觉得我们测试同行里的新人很多,如果也有类似的心境、类似的情况,那就千言万语莫敌,执此无语凝噎!   (转载请著明本网站和作者sinckyzhang@msn.com)                           ***:您好!首先为我...

测试设计中需要考虑的22种测试类型

测试设计中需要考虑的22种测试类型--测试设计中需要考虑的22种测试类型--    黑盒测试:不基于内部设计和代码的任何知识,而是基于需求和功能性。  白盒测试:基于一个应用代码的内部逻辑知识,测试是基于覆盖全部代码、分支、路径、条件。  单元测试:最微小规模的测试;以测试某个功能或代码块。典型地由程序员而非测试员来做,因为它需要知道内部程序设计和编码的细节知识。这个工作不容易作好,除非应用系统有...

看懂浪潮服务器产品系列分类(下)

发布时间:2005-12-06 扩展 英特尔 数据库 服务器 产品 浪潮
   (2)NL220NL220作为具有海量处理能力的部门级服务器(如图4所示),支持双路具有超线程技术的英特尔至强处理器(最高可达3.06GHz)以及ECCDDR内存,配合全新PCI―X总线构建功能强大的商业计算平台,集成Ultra320SCSIRAID,实现安全存储。加之双网卡冗余,帮助您确保网络应用正常工作,配合网卡负载均衡提升您的应用效率;支持热拔插冗余电源,大大减少您昂贵的非计划停机时间...

测试用例设计技术之一-------等价类法

       在软件测试中,测试用例的设计是一件很难的事情。你可以拿任何一个公司的两个不同人员就同一功能点所写的测试用例来看,肯定会发现有所不同,这是为什么呢?一是着眼点不一样,二是经验不同,三是思维的问题了。其实你可以看到,有的人写的用例简单明了,有的人写的用例却是复杂冗长,出现这种情况并不奇怪,因为测试用例本身的设计方法与技巧很多都是从经验中来的,有些形成了理论,而有些还形成不了能够指导测试活...

软件测试工程师发展计划

发布时间:2017-11-16 测试 操作系统 数据库
一.背景分析:软件测试工程师,未来计算机领域的香饽饽根据有关职位统计资料显示,在国外大多数软件公司,1个软件开发工程师就需要辅有2个软件测试工程师。目前,软件测试自动化技术在我国则刚刚被少数业内专家所认知,而这方面的专业技术人员在国内更是凤毛麟角。根据对近期网络招聘IT人才情况的了解,许多正在招聘软件测试工程师的企业很少能够在招聘会上顺利招到合适的人才。  随着中国IT行业的发展,产品的质量控制与...

工作总结:涉及数据库、软件测试等内容

前言    本人是一名测试工程师,以下内容是工作或者学习过程中的整理归纳,方便以后回顾。    每天努力一点点,每天进步一点点,加油。    点击下面子标题,跳转进去查看具体篇章。 一、Mysql数据库   Mysql数据库学习及总结                               Mysql数据库调优篇 二、软件测试 1、功能测试    功能测试_通用方法              ...

为何要写测试用例

发布时间:2018-03-29 测试 数据库
 1.深入了解需求的过程一个项目立项开始,测试就开始介入,我们从产品的需求文档、原型图,效果图等相关文档去熟悉产品的各个模块,各个业务流程。或者在产品规划和设计阶段,测试开始熟悉产品。而编写用例的过程中,会充分的思考产品需求的细枝末节,需求的不合理、有矛盾、不明确的地方,还能对产品提出更好的建议,监督产品对需求做出更加详细的设计。整个过程是对需求深入了解的过程,产品的整个印象都在测试脑海里。 2....

如何设计一个好的测试用例

发布时间:2013-10-25 测试 数据库
一,检查标准1.准确性(Accurate)Testswhatthedescrīptionsaysitwilltest.测试覆盖了描述部分需要测试的内容。 2.经济性(Economical)Hasonlythestepsneededforitspurpose.测试用例没有冗余的步骤 3.可重复性(Repeatable)Selfstanding,sameresultsnomatterwhotestsi...

测试用例--新手

发布时间:2012-02-02 测试 数据库
在此之前我搜集一些关于测试用例的知识,后来在我们的QQ群里专门定了一期讨论,来探讨测试用例,毕竟这是一个很大的话题,很难做到面面俱到,但我会尽量全面,用通俗的语言来说测试用例。---------------------------------------------------------------------------------------注:我们这里要说的测试用例指功能测试用例。一、什么...

软件测试面试题

发布时间:2021-08-20 管理 数据库 测试工具 单元测试
软件的生命周期(prdctrm)        计划阶段(planning)-〉需求分析(requirement)-〉设计阶段(design)-〉编码(coding)->测试(testing)->运行与维护(runningmaintrnacne)测试用例        用例编号  测试项目  测试标题  重要级别  预置条件  输入数据  执行步骤   预期结果1、问:你在测试中发现了...

测试技巧

发布时间:2009-02-16 测试 服务器 IE
(1)边界测试,测试用户输入框中的数值的最大数和最小数,以及为空时的情况。 (2)非法测试,例如在输入数字的地方输入字母。 (3)跟踪测试,跟踪一条数据的流程,保证数据的正确性。 (4)在开始测试时应保证数据的正确性,然后在从系统中找出各种BUG。(5)接口测试,程序往往在接口的地方很容易发生错误,要在此模块测试勿掉以轻心。 (6)代码重用测试,在开发过程中有些模块功能几乎相同,程序员在重用代码时...

软件测试常见面试题

发布时间:2020-03-04 LINUX 数据库 测试工程师 软件测试
理论:问:什么是版本控制,常用的版本控制系统有哪些?答:版本控制(Revisioncontrol)是一种软体工程技巧,籍以在开发的过程中,确保由不同人所编辑的同一档案都得到更新。Git(读音为/gɪt/。)是一个开源的分布式版本控制系统,可以有效、高速的处理从很小到非常大的项目版本管理。Git是LinusTorvalds为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件。https:...

MySql的Delete、Truncate、Drop分析

发布时间:2012-06-05 DELETE TABLE 数据库 MYSQL 存储 语言
相同点:  truncate和不带where子句的delete,以及drop都会删除表内的数据  不同点  1.truncate和delete只删除数据不删除表的结构(定义)  drop语句将删除表的结构被依赖的约束(constrain)、触发器(trigger)、索引(index);依赖于该表的存储过程/函数将保留,但是变为invalid状态。  2.delete语句是数据库操作语言(dml),...

软件测试和测试开发有什么区别?

发布时间:2021-07-08 服务器 LINUX 运维 软件测试
对于零基础同学来说,好多想从事软件测试开发,但是却不知道到底要学习些什么内容。在选择培训班时候,看课程内容也看不懂,不清楚要讲的内容是否都是有用的干货。可能,一些同学去培训机构了解的时候,咨询老师会告诉说“软件测试比学开发更简单,入门很快”。如果计算机基础比较差,逻辑性也不强,学历各方面也不高的话,建议学习软件测试。学软件测试出来的薪资待遇不比开发少,未来发展趋势也不错。你要说这些培训机构或咨询老...

场景设计方法

发布时间:2019-03-27 测试 数据库
一.方法简介现在的软件几乎都是用事件触发来控制流程的,事件触发时的情景便形成了场景,而同一事件不同的触发顺序和处理结果就形成事件流。这种在软件设计方面的思想也可以引入到软件测试中,可以比较生动地描绘出事件触发时的情景,有利于测试设计者设计测试用例,同时使测试用例更容易理解和执行。基本流和备选流:如下图所示,图中经过用例的每条路径都用基本流和备选流来表示,直黑线表示基本流,是经过用例的最简单的路径。...

数据库导出表结构设计word文档

发布时间:2016-09-08 数据库
1、DBExportDocV1.0ForOracle工具导出的word文档中的表格没有边框。2、可以通过如下的宏,选中所有表格后,进行边框设置。ALT+F8,打开宏对话框,创建名为SelectAllTables的宏。代码如下:SubSelectAllTables()DimtempTableAsTableApplication.ScreenUpdating=False'判断文档是否被保护IfActi...

软件测试V模型

发布时间:2017-04-21 测试 数据库
软件测试V模型V模型大体可以划分为以下几个不同的阶段步骤:需求分析、概要设计、详细设计、软件编码、单元测试、集成测试、系统测试、验收测试。需求分析即首先要明确客户需要的是什么,需要软件做成什么样子,需要有哪几项功能,这一点上比较关键的是分析师和客户沟通时的理解能力与交互性。要求分析师能准确的把客户所需要达到的功能,实现方式,等表述出来,给出分析结果,写出需求规格说明书。 概要设计主要是架构的实现,...

软件开发的V模型

发布时间:2019-03-05 测试 数据结构与算法 数据库
原文来自:http://www.51testing.com/html/67/n-3723567.html软件开发的V模型大家都不陌生,其中测试阶段分为单元测试->功能测试->系统测试->验收测试。其中单元测试一般由开发自己完成,大部分测试具体实施(这里不包括用例设计)是从单体功能测试开始着手的。原文来自:https://blog.csdn.net/summerlemon/arti...

登陆、添加、删除、查询模块的测试点

发布时间:2007-03-21 测试 TABLE 数据库 软件测试
1.    登陆①    用户名和密码都符合要求(格式上的要求)②    用户名和密码都不符合要求(格式上的要求)③    用户名符合要求,密码不符合要求(格式上的要求)④    密码符合要求,用户名不符合要求(格式上的要求)⑤    用户名或密码为空⑥    数据库中不存在的用户名,不存在的密码⑦    数据库中存在的用户名,错误的密码⑧    数据库中不存在的用户名,存在的密码⑨    输入的...

高楼的性能工程实战课-011-打开首页--一个案例带你搞懂硬件设施的性能问题

发布时间:2021-08-27 数据库 笔记 BIG DATA
打开首页--一个案例带你搞懂硬件设施的性能1.看架构图:如果有工具直接展示更好,如果没有工具,建议我们画一画,方便以后分析,不要自信认为自己能记住框架的所有组件。2.顺便看下代码逻辑,从代码中查看这个接口实现的逻辑,在做哪些动作,以及后续的链路。3.确定压力数据:   这里我们就要思考一下了:如果想要执行一个场景,并且这个场景可以压出打开首页接口的最大TPS,我们应该怎么设置压力工具中的线程数、递...

性能测试分析案例

发布时间:2019-05-20 数据库 游戏 VIEWUI 前端
转载:chengzhang的博客1.1. 程序分析案例用jconsle做监控,发现内存持续的不释放,波谷或者波峰呈现持续上升的趋势,并且监控tomcat日志的时候发现有outofmemory:java heapspace的错误日志,就用jmap区定位这个问题,找到了在JVM内存堆中占用最大的一个类。然后和开发沟通后,对这个方法进行修改后,再次用jconsle进行监控,发现内存增长,回收波动变得比较...

CPU分析系列--性能测试---数据库性能分析

发布时间:2021-11-18 服务器 性能测试 数据库 测试工程师
目录1.数据库设置 2.nmon查看服务器状态 3.分析定位性能瓶颈:响应时长过长,TPS低:    a.查看服务器资源使用情况,如果user态%CPU使用率高,        1.定位是哪个进程占用率高:        2.查看响应时间:        3.查询慢查询日志中就有相关sql        4.在执行计划EXPLAIN中查看执行信息.    b.查看服务器资源使用情况,如果系统资源占...

测试淘宝购物流程图,梳理基本流和备选流,测试用例

发布时间:2022-03-01 服务器 小程序 测试用例
1.访问淘宝,登录,登录成功,搜索键盘添加购物车选择支付方式,支付宝支付支付成功,订单完成。2.访问淘宝,登录,登录成功,搜索键盘添加购物车选择支付方式支付宝支付,余额不足,使用花呗,支付成功,订单完成3.访问淘宝,登录,登录成功,搜索键盘添加购物车选择支付方式支付宝支付,余额不足,使用花呗,花呗余额不足,支付失败。4.访问淘宝,登录,登录成功,搜索键盘添加购物车选择支付方式支付宝支付,余额不足,...

Linux命令

发布时间:2022-03-13 运维 LINUX 服务器
Linux解压,压缩命令打包命令:tar-zcvf需要压缩的文件名称.tar.gz压缩后文件名称c:打包文件v:显示运行过程f:指定文件名解压命令:tar-xzf文件名称.tar.gz显示当前文件位置:pwd查看当前系统中运行的进程:ps-ef杀死当前进程:kill-9线程数网络通信命令:ifconfig查看网络是否正常使用:ping网址或网段查看当前系统的端口使用:netstat-an|grep...

本地计算机上的SQL Server(MSSQLSERVER)服务启动后又停止了。问题解决方法之一

今天启动SQLserver服务时遇到如下问题:从网上搜索大部分都说是由于Sqlserver2005配置管理器->Sqlserver2005网络配置->MSSQLSERVER的协议->VIA,状态为“已启用”导致,将其设置为禁用即可查看本机发现VIA状态为“已禁用”  然后效仿别人查看安装路径下的Errorlog,结果发现部分有效信息,如图粉色框圈选部分:找到问题的入口后,开始寻找...

oracle 11g导出的dmp数据导入到oracle10g

发布时间:2011-09-14 ORACLE11G 工具 ORACLE ORACLE10G 数据库
将oracle 11g导出的dmp文件导入到oracle10g 1.进行导入表操作,提示:IMP-00010:不是有效的导出文件,头部验证失败IMP-00000:未成功终止导入 2.从网上查阅,oracle数据11g到10g是有问题的,一般由oracle10g客户端去连oracle11g进行导出数据操作然后导入到oracle10g,如果手中只有oracle11g的dmp文件,怎么办3.从网上查阅,...

登陆服务器和游戏服务器为甚要分开总结

发布时间:2020-01-19 游戏
登陆服务器和游戏服务器为甚要分开 摘自知乎把游戏登陆逻辑单独成一个服务的优点有如下几点:登陆入口唯一.:游戏如果不是自己运营,则需要上其他平台。每个平台只能有一个登陆服务器,但是游戏逻辑服务器要跟着玩家数量的增加而增加。方便扩展:游戏可能会在多个平台一起运营,不同的平台对登陆的处理方式可能不一样。单独把登陆部分分开的话,只要修改登陆服务的代码,然后发布就可以了,其他部分的服务器不需要做任何修改。部...

游戏服务器框架

发布时间:2015-05-25 JSON C/C++ 数据库
游戏服务器框架——蔡剑彬C++服务器开发工程师(caijianbin668934@163.com)最简单的服务器莫过于在一个while循环里面不停地accept新的sockset,然后做相应的处理。虽然个人是比较推崇简单的事物,毕竟简单才是终极的复杂。但是如果那样做,在实际应用中就难免不适用。所以,在不把服务器变得十分复杂的前提下,一步步地从一个while循环拓展为能够适用于实际情况的服务。首先,...

简单游戏服务器客服端搭建

客户机: Login()// 登入模块{ 初始化游戏数据; 获取用户输入的用户和密码; 与服务器创建网络连接; 发送至服务器进行用户验证; ... 等待服务器确认消息; ... 获得服务器反馈的登入消息; if( 成立 )  进入游戏; else  提示用户登入错误并重新接受用户登入;}Game()// 游戏循环部分{ 绘制游戏场景、人物以及其它元素; 获取用户操作输入; 将用户的操作发送至服务器...