游戏服务器设计
利来利往
幽默,诚实,守时,守信,适应能力强。
展开
-
【面试攻略】服务端面试-边锋
redis做排行榜什么容器战斗说说你自己搭的架构全球同服的架构数据库日志量很大的问题你开发中遇到让你记忆很深的问题go 和 redis 你熟悉吗说一说你熟悉的架构monggoDB和MySQL区别登录流程哪些数据库优化拍卖聊天版本管理战斗是你做的吧redis排行榜哪些地方用了多线程充值内存泄漏UDP用过吗,TCP/UDP区别...原创 2022-02-02 14:48:51 · 870 阅读 · 0 评论 -
multivisor安装
.h部分代码//红包结构体struct tagRedPacket { tagRedPacket() { ReSet(); } void ReSet() { ZeroMemory(this, sizeof(tagRedPacket)); } LONGLONG lTime; //发红包的时间 WORD wId; //红包id DWORD ...原创 2019-08-16 16:42:06 · 3552 阅读 · 0 评论 -
KCP协议简介
KCP协议简介http://www.freeoa.net/product/enterpriseapp/kcp-protocol-intro_3262.html可靠UDP,KCP协议快在哪?https://www.cnblogs.com/wetest/p/9190786.htmlKCP(5)-对比TCPhttp://vearne.cc/archives/39336转载 2021-04-12 15:56:48 · 496 阅读 · 0 评论 -
【手游项目5】skynet-3
本篇为实战了,如果有些代码看不懂,或者skynet找不到,请下载demohttps://github.com/sundream/ggApp1.集群cluster = require "skynet.cluster"集群间的通讯,是由一个独立的 harbor 服务来完成的。所有的消息包在发送时,skynet 识别出这是一个远程消息包时,都会把它转发到 harbor 服务内。harbor 服务会建立 tcp 连接到所有它认识的其它 skynet 节点内的 harbor 服务上。https:/.原创 2020-12-24 17:01:49 · 605 阅读 · 1 评论 -
【手游项目5】skynet-2
GateServerGate 只负责读取外部数据,但不负责回写。也就是说,向这些连接发送数据不是它的职责范畴。作为示范,skynet 开源项目实现了一个简单的回写代理服务,叫做 service_client 。启动这个服务,启动时绑定一个 fd ,发送给这个服务的消息包,都会被加上两字节的长度包头,写给对应的 fd 。根据不同的分包协议,可以自己定制不同的 client 服务来解决向外部连接发送数据的模块。https://github.com/xzhovo/skynet-websocket-gat.原创 2020-12-24 16:59:03 · 435 阅读 · 1 评论 -
【手游项目5】skynet-1
skynet 概述Skynet 的核心功能就是发送消息和处理消息充分利用多核优势,将不同的业务放在独立的执行环境中处理,协同工作,Lua State 已经提供了良好的沙盒,隔离不同执行环境;多线程模式,可以使得状态共享、数据交换更加高效。https://blog.codingnow.com/2012/09/the_design_of_skynet.htmlhttps://blog.csdn.net/SnailCpp/article/details/807217561.为了提供高效的服务间通讯.原创 2020-12-24 16:56:03 · 279 阅读 · 1 评论 -
【C++服务端技术】消息队列
ThreadWorkUnit.h#pragma once#include <queue>#include <pthread.h>#include "SafeQueue.h"namespace Extralib{ namespace Thread { //消息結構體 struct sWorkItem { sWorkItem() { type = 0; nDataSize = 0; pData = NULL;原创 2020-12-08 10:44:54 · 282 阅读 · 0 评论 -
【C++服务端技术】智能锁
#pragma once#include <pthread.h>namespace Extralib{ namespace Thread { /* * 利用对象生存周期自动加解锁,比较安全 */ class AutoLock { public: pthread_mutex_t& m_locker; public: AutoLock( pthread_mutex_t& locker ):m_locker(locker) {.原创 2020-12-08 10:25:30 · 478 阅读 · 0 评论 -
【C++服务端技术】队列
链表和锁实现的队列,锁的代码请看其他文章#pragma once#include <list>#include "AutoLock.h"namespace Extralib{ namespace SafeQueue { using namespace Thread; template<typename Data> class safe_queue { private: std::list<Data> the_queue;原创 2020-12-08 10:20:20 · 91 阅读 · 0 评论 -
【C++服务端技术】对象池
代码没贴全,就少一个锁头文件,可以做设计参考设计思想就是维护一个空闲链表,没有用的就重新申请,有的话就拿链表的头,使用完又还给空闲链表。/*一个分配固定大小内存的内存池,使用链表维护*/#pragma once#include <list>using namespace std;#include "../Thread/AutoLock.h"using namespace Extralib::Thread;struct Link{ Link* m_pNext;}原创 2020-12-08 10:02:32 · 156 阅读 · 0 评论 -
服务器IO-HPSocket
HP-Socket是一套通用的高性能TCP/UDP/HTTP 通信框架,包含服务端组件、客户端组件和Agent组件,广泛适用于各种不同应用场景的TCP/UDP/HTTP通信系统,提供C/C++、C#、Delphi、E(易语言)、Java、Python等编程语言接口。HP-Socket对通信层完全封装,应用程序不必关注通信层的任何细节;HP-Socket提供基于事件通知模型的API接口,能非常简单高效地整合到新旧应用程序中。 [1]为了让使用者能方便快速地学习和使用HP-Socket,迅速掌握框架的设计思.转载 2020-11-25 12:36:06 · 617 阅读 · 0 评论 -
【C++服务端技术】移动广播
/*基于9宫格的移动广播,进入视野离开视野1.根据玩家的xy左右计算玩家移动之前和移动之后的格子id2.根据格子id计算附近的格子,附近格子里面的玩家成为附近玩家3.向新减少的格子的玩家发送离开视野,向新增的格子的玩家发送进入视野*/bool Room::HandleOnMove( IRole * pRole ){ if(NULL == pRole) return false; Room *pRoom = pRole->GetRoom(); i...原创 2020-11-23 13:54:24 · 208 阅读 · 0 评论 -
[手游项目4]C++封装的排行榜管理
CRankingMgr::Instance()->AutoInit(); //根节点 Json::Value root; //子节点 Json::Value partner; partner["matchid"] = 1; partner["bet"] = 2; root.append(partner); Json::FastWriter writer; CRankin...原创 2019-08-29 15:59:37 · 865 阅读 · 3 评论 -
【C++服务端技术】定时器
这个设计每调用一次就会重新注册,欢迎交流#include <iostream>#include <map>#include <vector>#include <time.h>#include <windows.h>#include <stdio.h>using namespace std;struct tagTime{ long long llStarTime; int iCount; int原创 2020-11-21 16:26:20 · 206 阅读 · 0 评论 -
C++11
发现这个经常被问到,恰好我工作中C++11用得不多。。。1.Initiallizer list2.auto type 大爱3.foreach 写c++像是再写c#4.nullptr 代替了c++ 03的NULL5.enum class代替了c++03的enum,更安全6.override关键标识 for virtual function (更加安全,直观 )7.final关键标识 ,主要是class 及virtual function8.关键字default标识, compiler转载 2020-11-05 15:54:53 · 257 阅读 · 0 评论 -
C++-发现内存泄漏方法+解决玩家网络卡的问题
1.发现内存泄漏方法用一个静态变量来记录这个类当前存活的数量,在需要监控的类的基类的构造函数里计数+1,在析构函数里计数-1。2.在WP微信中是如何发现内存泄漏的。WP微信使用对象计数的方式来初步发现内存泄漏,如果已经离开一个页面,但这个页面仍然有存活的实例,那么就说明这个页面发生泄漏了。可见要发现UI的内存泄漏,还是很容易的。怎么解决玩家网络卡的问题1.客户端插值(解决卡顿):当客户端A收到服务端发来的玩家B的位置,不是直接瞬移到数据包中指定的位置 ,而是使用插值的方法平滑地插值到新的位置转载 2020-10-28 23:02:27 · 196 阅读 · 0 评论 -
C++面试基础篇2
原文链接https://segmentfault.com/a/1190000037494080?utm_source=sf-related转载的,说说我的个人感受吧,我知道这些是基础知识,知道这些基础当然最好了可是我想说的是大哥我是一个游戏服务端开发,我面向的是游戏玩家,我使用的是开发软件。你给我整那些stl源码?Linux内核?我的用户不是程序员,我不是开发电脑系统,也不是开发VS这样的编程软件。如果你们觉得我只懂得应用这些软件,不知道...转载 2020-10-24 22:48:16 · 111 阅读 · 0 评论 -
我对服务器架构的几种设计的思考,以及他们优缺点
我对服务器架构的几种设计的思考,以及他们优缺点1.分线设计(诛仙端游-单服上万人同时在线)clien gameserver worldServer DBServer多个游戏逻辑服,分线设计,通过worldServer切换线,基本上游戏的所有功能都在这里,不同线的玩家可以聊天但是相互看不到,要换线才能在一起做任务。组队,工会,开服,跨服活动需要做在worldServer优点,因为gameserver可以多开,所以承载上有优势缺点,1.需要跨越gameserver的开发就麻烦一点,...原创 2020-10-23 16:09:54 · 328 阅读 · 0 评论 -
epoll服务器
#include <stdio.h>#include <stdlib.h>#include <ctype.h>#include <string.h>#include <unistd.h>#include <sys/types.h>#include <sys/socket.h>#include <...转载 2019-10-29 13:21:49 · 1277 阅读 · 0 评论 -
消息队列
消息队列 我们所能想到的最简单的消息队列可能就是使用stl的list来实现了,即消息队列内部维护一个list和一个互斥锁,putMessage时将message加入到队列尾,getMessage时从队列头取一个message返回,同时在getMessage和putMessage之前都要求先获取锁资源。实现虽然简单,但功能是绝对满足需求的,只是性能上可能稍稍有些不尽如人意。其最大的问题在转载 2014-02-15 17:41:08 · 566 阅读 · 0 评论 -
游戏服务器架构
服务器类型:GateServer:网关服务器GameSerger:游戏逻辑服务器WorldServer:世界服务器DbCahtch:数据库服务器其中儿童游戏和其他游戏设计上有一点点区别,玩过4399上面儿童游戏的就知道,儿童游戏是世界同服,不像其他的游戏要分区。他们的区别就是儿童游戏只有一个WorldServer,而其他游戏一个区一个WorldServer。原创 2013-11-07 17:45:31 · 1156 阅读 · 0 评论 -
网络模型
网络模型在对性能要求比较高的服务器上,select一般不会是最好的选择。如果我们使用windows平台,那IOCP将是首选;如果是linux,epool将是不二选择selecthttp://baike.baidu.com/subview/621719/11844440.htm?fr=aladdinIOCPhttp://baike.baidu.com/link?url=69gch原创 2014-02-15 17:16:56 · 621 阅读 · 0 评论 -
大并发服务器开发
http://blog.csdn.net/column/details/yumeiz.html转载 2013-06-01 10:28:31 · 2199 阅读 · 0 评论 -
注意事项
1.为了游戏主逻辑循环的流畅运行,所有比较耗时的IO操作都会分享到单独的线程中去做,如网络IO,数据库IO和日志IO等。当然,也有把这些分享到单独的进程中去做的。原创 2014-02-15 17:27:58 · 572 阅读 · 0 评论 -
协议
协议结构体定义struct NetMsgHeader{NetMsgLenType BuffLen; //buff的长度NetMsgMsgIdType MsgID; //消息ID};//给客户端的消息struct tagNetMsg :public NetMsgHeader{void Serialize(Stream& stream){stream.Wri原创 2014-03-10 15:43:42 · 707 阅读 · 0 评论 -
数据库设计
我个人比较熟悉的是mysql,我就说说我经历过的项目的数据存储方式。不管怎么设计玩家表是必不可少的1.以系统建表这种建表方式就会有很多的表,这种设计一般字段都是简单数据类型,不会用blob.这样设计数据库的人他们是函数式思想,他们的游戏系统应该也是独立于玩家的,比如背包系统玩家对象里面只存一个背包Id,背包管理系统管理所有玩家的背包,管理背包Id和背包对象,就是他们设计上,玩家和背原创 2014-03-10 12:03:26 · 752 阅读 · 0 评论 -
游戏场景
场景的设计只是简单的概括的流程;场景管理器{ map m_SwtichMapPlayers;//场景里面的玩家 CScene scenes[MAX_SCENE_ID]; //场景容器}场景{ 用容器管理格子是否可行, 用容器是否安全区 预先生成每个格子的附近格子}格子{ bool m_bNeedSync; //格子是否需要原创 2014-03-18 17:28:27 · 883 阅读 · 0 评论 -
调试dump文件
让程序在崩溃时体面的退出之Dump文件 .在我的那篇《让程序在崩溃时体面的退出之CallStack》中提供了一个在程序崩溃时得到CallStack的方法。可是要想得到CallStack,必须有pdb文件的支持。但是一般情况下,发布出去的程序都是Release版本的,都不会附带pdb文件。那么我们怎么能在程序崩溃的时候找到出错的具体位置呢?这个时候就该Dump文件出场了!Dump文件是进转载 2014-06-10 13:40:23 · 708 阅读 · 0 评论 -
用VS调试dump的几个问题
1. dump文件和pdb文件的匹配问题>> 发布二进制文件时生成的pdb文件一定要保留,只有当发布的二进制文件和pdb文件是同时生成的才好正确调试。2. dump文件和pdb文件放在哪里的问题>> 如果dump文件和pdb文件放在同一个目录,则可直接运行调试;当然也可以不是同一个目录,那么在启动dmp文件后,需要设置一下vs的符号文件路径:Tools->Options->转载 2014-06-10 13:43:04 · 761 阅读 · 0 评论 -
让程序在崩溃时体面的退出之Dump文件
在我的那篇《让程序在崩溃时体面的退出之CallStack》中提供了一个在程序崩溃时得到CallStack的方法。可是要想得到CallStack,必须有pdb文件的支持。但是一般情况下,发布出去的程序都是Release版本的,都不会附带pdb文件。那么我们怎么能在程序崩溃的时候找到出错的具体位置呢?这个时候就该Dump文件出场了!Dump文件是进程的内存镜像,可以把程序运行时的状态完整的保存下来。转载 2014-05-28 09:56:30 · 530 阅读 · 0 评论 -
Dump文件
Dump文件是进程的内存镜像。可以把程序的执行状态通过调试器保存到dump文件中。Dump文件是用来给驱动程序编写人员调试驱动程序用的,这种文件必须用专用工具软件打开,比如使用WinDbg打开。在Windbg中可以通过.dump命令保存进程的dump文件。比如下面的命令把当前进程的镜像保存为c:\testdump.dmp文件:.dump /ma C:转载 2014-05-28 09:52:40 · 626 阅读 · 0 评论 -
天龙八部服务器端共享内存的设计(2/3)
六、样例分析——玩家角色数据的存储和共享服务器端玩家角色对于的类型是class Obj_Human,里面有角色数据库存储接口的定义:protected://存放所有关于Obj_Human的、从数据库里读取的信息HumanDB m_DB;class HumanDB中拥有内存共享对象指针,以及角色需要存储的数据定义。private://共转载 2014-07-12 14:34:26 · 852 阅读 · 0 评论 -
天龙八部服务器端共享内存的设计(1/3)
一、服务器构架一个天龙八部游戏区,主要服务器部署情况如下图所示:实际部署可能有所不同。区角色数据库可以安装到Machine4,那么一个区有5台物理机器。LoginServer和WorldServer、CharacterDB、BillingServer有连接。WorldServer和各个GameServer有连接。ShareMemory和CharacterDB有连接。转载 2014-07-12 14:33:49 · 1839 阅读 · 0 评论 -
天龙八部服务器端共享内存的设计(3/3)
2. GameServer的消息响应如下:UINT WGRetUserDataHandler::Execute( WGRetUserData* pPacket, Player* pPlayer )//这么大的数据包是通过网络发过来的pGamePlayer->InitHuman( pPacket->GetUserData(),UDR_USERDATA, pPacket->Ge转载 2014-07-12 14:34:57 · 1149 阅读 · 0 评论 -
Workbench使用教程
点击打开链接转载 2016-10-17 10:42:16 · 5553 阅读 · 0 评论 -
SVN服务器搭建和使用(二)
上一篇介绍了VisualSVN Server和TortoiseSVN的下载,安装,汉化.这篇介绍一下如何使用VisualSVN Server建立版本库,以及TortoiseSVN的使用.首先打开VisualSVN Server Manager,如图:可以在窗口的右边看到版本库的一些信息,比如状态,日志,用户认证,版本库等.要建立版本库,需要右键单击左边窗口的Repositores,如图转载 2014-06-05 10:44:35 · 552 阅读 · 0 评论 -
SVN服务器搭建和使用(三)
接下来,试试用TortoiseSVN修改文件,添加文件,删除文件,以及如何解决冲突等.添加文件在检出的工作副本中添加一个Readme.txt文本文件,这时候这个文本文件会显示为没有版本控制的状态,如图:这时候,你需要告知TortoiseSVN你的操作,如图:加入以后,你的文件会变成这个状态,如图:这时候使用TortoiseSVN进行提交.这样别人就能看到你所做的更改转载 2014-06-05 10:55:18 · 575 阅读 · 0 评论 -
程序崩溃的时候得到CallStack
#include #include #include #include #include // 添加对dbghelp.lib的编译依赖 // #pragma comment(lib, "dbghelp.lib") using namespace std; const int MAX_ADDRESS_LENGTH = 32; const int原创 2016-10-17 10:32:05 · 1841 阅读 · 0 评论 -
让程序在崩溃时输出Dump文件
X转载 2016-11-09 09:23:35 · 2946 阅读 · 0 评论 -
数据库设计软件 power designer
PowerDesigner是Sybase公司的CASE工具集,使用它可以方便地对管理信息系统进行分析设计,它几乎包括了数据库模型设计的全过程。 利用PowerDesigner可以制作数据流程图、概念数据模型、物理数据模型,可以生成多种客户端开发工具的应用程序,还可为数据仓库制作结构模型,也能对团队设备模型进行控制。 它可与许多流行的数据库设计软件,例如:PowerBuilder,Delph转载 2016-10-06 11:47:43 · 659 阅读 · 0 评论