
游戏服务器
文章平均质量分 69
MKleee
游戏服务器开发工程师
展开
-
Mysql事务以及特性
事务(transaction),是一个操作序列。这些操作要么都做,要么都不做。事务有四个特性,即ACID。Atomicity(原子性),指一个事务是一个不可分割的工作单位,其中的操作要么都成功,要么都失败,不能存在部分成功或者部分失败的情况。如果事务中一个SQL语句执行失败,则已执行的语句也必须回滚,数据库退回到事务前的状态。InnoDB保证原子性是通过redo log以及undo log来进行的。在InnoDB中,redo log是以512字节进行存储的,正好是磁盘页大小,因此写入是原子性的,不需要额外的原创 2022-06-10 15:35:25 · 703 阅读 · 0 评论 -
Redo log
redo,重做,目的是恢复数据库的操作,在发生意外时进行重新操作,保证数据安全。Redo Log重做日志,事务中修改的任何数据,都会存储到日志中,包含表空间id、插入的记录所在的页号、insert的具体数据等。当数据库启动时,会根据checkpoint来判断哪些数据是需要恢复的。进行数据恢复时,innodb将从LOG_CHECKPOINT_LSN所指向的redo文件位置开始进行数据恢复。图一 lsn其中,checkpoint_page = redo_lsn - checkpoint_lsn,指已经记录到re原创 2022-06-10 15:33:26 · 224 阅读 · 0 评论 -
游戏设计模式-单例模式
当我刚进入游戏行业的时候,所编写的代码,使用了不少的单例,但随着后来的很多bug,我开始意识到单例模式的弊端。1 什么是单例模式“确保一个类只有一个实例,并为其提供一个全局访问入口。单例模式提供了在编译期就能确保某个类只有一个实例的方法。单例的定义:(1)构造函数私有化,防止外界创建出对象;(2)使用一个唯一的变量指向该类的唯一实例;(3)提供一个开放接口供外部使用。2 创建单例的几种方法(1)Lazy Singleton(懒汉):单例在第一次使用时才会被创建出来。原创 2022-04-20 22:04:43 · 4664 阅读 · 0 评论 -
游戏设计模式-原型模式
使用特定原型实例来创建特定种类的对象,并且通过拷贝原型来创建新的对象。原型模式的核心思想是:一个对象可以生成与自身相似的其他对象。假设我们有一个怪物的类,我们可以这样构造:#include <iostream>class Enemy{public: virtual ~Enemy() {} virtual std::shared_ptr<Enemy> Clone() = 0;};class BirdEnemy :public Enemy{public.原创 2022-04-14 12:06:06 · 3440 阅读 · 0 评论 -
游戏设计模式-观察者模式
成就系统,基本上是每个游戏里都会涉及到的系统,但如果直接使用其它系统的函数接口,你将会发现整个项目中,每个系统都要和成就系统耦合在一起。这是一件极其糟糕的事情。观察者模式可以解决这件事情。首先,我们先定义两个类,分别是观察者和被观察者。观察者:class Observer{ friend class Subject;public: Observer() :next(nullptr), previous(nullptr) {} void OnNotify(con.原创 2022-04-09 23:38:28 · 5426 阅读 · 0 评论 -
游戏设计模式-命令模式
游戏中,玩家的输入方式有很多种,例如键盘、鼠标等。玩家输入操作,游戏需要调用相应的逻辑,最简单的处理方式是:if (Input.GetKeyDown("Q")) Jump();else if (Input.GetKeyDown("T")) Idle();else if (Input.GetKeyDown("A")) Attack();else if (Input.GetKeyDown("Z")) Skill();...原创 2022-04-07 23:57:14 · 3492 阅读 · 0 评论 -
Linux调整随机端口范围(服务器启动失败 端口被占用)
Linux调整随机端口范围博主最近在工作中遇到了问题,服务器启动不起来,bug显示端口被占用。端口是被connect端给占用了,非listen端。原创 2022-03-09 10:20:31 · 5038 阅读 · 0 评论 -
分布式服务器中的数据安全问题及其解决办法
最近笔者在工作中遇到了这样一个问题:对于离线的数据/远端的数据,如何保证在处理过程中的数据安全。原创 2022-03-04 15:09:08 · 2844 阅读 · 1 评论