服务器架构
文章平均质量分 92
narlon
这个作者很懒,什么都没留下…
展开
-
db服务器在游戏服务器组中的作用
db(一般是mysql,或是类似的,比如mariadb)在游戏服务器中,启动了数据落地的作用。游戏服务器可以直接和db建立访问连接操作数据,或者通过一个中间人(DbServer)来完成这个工作。本文,我们以独立DbServer来分析带来的好处,以及遇到的问题。下文提到的一些优势,如果不单独封装一个db服务器(通过一个存储模块的方式来实现)也可能可以做到。但如果有一个独立的db服务器时,更容易把...原创 2018-08-19 09:35:26 · 3200 阅读 · 0 评论 -
多个游戏进程服务器的管理
多进程VS多线程在之前的文章中,已经提到了目前服务器的主流框架是多进程或者多线程的架构(游戏服务器的中心节点)。多进程服务器可以分布式部署,总体会更加灵活。此外,多进程的情况下,我们可以更加肆无忌惮的使用静态数据;但多线程情况下,静态数据访问要么加锁,要么就只能尽量避免。另外,多进程如果发生异常崩溃等突发情况,不至于整个服务器组玉石俱焚。所以,一般我还是推荐使用多进程的架构。但是多进程...原创 2018-11-02 19:12:48 · 621 阅读 · 0 评论 -
把组合(树)模式集成到游戏服务器引擎中去!
什么是组合模式?组合模式是一种设计模式,和对象组合的概念是不同的。对象组合是相对于对象派生而言的一种对象间协作的关系。而组合模式是将对象组合成树形结构以表示整体-部分的层次结构,使得用户对单个对象和组合对象的使用更加一致的一种设计模式。( compose objects into tree structures to represent part-whole hierarchies. Comp...原创 2018-10-21 15:29:50 · 192 阅读 · 0 评论 -
游戏db服务器设计的相关问题
存档的简单历史单机游戏都会把存档以文件的形式保存在本地,于是最早的一片网游也是这么干的,他们把存档以二进制的形式存储为本地的文件。到了21世纪,mysql等开源数据库引擎的性能和安全性逐渐获得认可,于是主流的网游开始以数据库作为媒介存储玩家存档。但当时的用法和用文件存储实际并没有本质的区别,所有的数据会打包存成blob的形式,然后丢给mysql。随着网络游戏的复杂化,这种结构并不能适应新的...原创 2018-10-27 16:58:13 · 1209 阅读 · 0 评论 -
口水游戏主循环和组件
游戏主循环和是否是单机游戏并没有多少关系。因为单机游戏只不过是同时拥有服务器和客户端逻辑。那么客户端主循环和服务端主循环的差别也仅仅是设备的差别,客户端需要支持输入设备的读取,屏幕的渲染(Render);服务端需要支持写日志文件,处理来自客户端的远程访问。对于一个服务端来说,他多的或者说擅长的就是轮询,每秒百亿次的计算可以把所有事情都照顾的妥妥的。那么,在一个无限while循环的帮助下,游戏服...原创 2018-10-09 16:30:08 · 291 阅读 · 0 评论 -
游戏服务器架构中的中心节点
议会制 Vs 君主制分布式的服务器架构有点像议会制度,每一个节点都可以参与制定管理策略,进行一部分工作(征税,作战或是处理游戏逻辑,存储)。中心集中式的服务器(比如比较古老的单进程服务器架构),则把所有工作集于一身,自己爱干嘛就干嘛,毫无约束。他们的缺点也很明显,对于议会制,关键时刻谁说了算,会不会出现僵持;对于君主制,君主会不会玩火,万一君主仙逝了,会不会出现黑暗时代。于是,我们发现了一种更...原创 2018-09-25 11:09:59 · 1296 阅读 · 0 评论 -
如何封装一个服务器的网络库
为什么需要封装隐藏TCP数据黏连 隐藏TCP参数(超时时间,连接等待时间) 方便支持高级功能(心跳,重连,统计,加密,压缩,错误日志) 让对象关系更加明确(而不是一个Socket打遍天下无敌手)绝对不应该封装的内容序列化,这不应该归网络库来管,很容易把两者耦合起来,设计时必须要考虑 服务器架构网络的代码。比如,服务器组之间的数据通信,用来建立起服务器网络的握手或是服务器组内部的消...原创 2018-09-11 16:28:00 · 396 阅读 · 0 评论 -
关于服务器日志的记录
日志库类似于log4net,log4j这样的日志库功能早已经十分强大,所以类似如果format,如果输出到一个指定的device之类的问题,早就不需要广大程序员思索。所以本章讨论不会涉及这些内容。多进程服务器日志多进程的情况下,如果日志是采用写文件的方式,一般推荐每个进程单独写一个文件(即使log模块可以解决文件句柄竞争问题,也会存在性能损耗)。另一种方式,就是干脆不写文件,直接通过类...原创 2018-09-01 16:11:42 · 3230 阅读 · 0 评论 -
服务器热更新的讨论
我们之前的服务器是多进程纯C#架构的服务器。最近游戏上线,遇到有时候需要线上修bug的问题。之前对代码热更新预料不足,导致在线上出了一些bug时非常被动,往往需要重启服务器解决问题,影响前期的体验。我们的游戏类型是一个RPG卡牌游戏,操作偏向于单机向,大量依赖于广播的操作比较少。这周的时间里,也考虑了几种方案,下面对比下思考的结果。嵌入动态脚本首先,C#+python或者lua的游...原创 2018-08-25 19:55:30 · 4510 阅读 · 0 评论 -
Redis的设计感悟
编码,类型和指令Redis有5大基础类型(ROBJ),string,list,hash,set和zset。此外,底层实现有一些基本的数据结构(编码),linkedlist,ziplist,string,hashtable,skiplist。在上层,就是指令,也是和用户交互的指令。用户可以只关心这些指令,而完全不知道数据类型(ROBJ)以及编码(基础结构)的存在。先看下,类型和编码的关系...原创 2018-11-17 19:56:56 · 195 阅读 · 0 评论