
游戏服务器设计
利来利往
幽默,诚实,守时,守信,适应能力强。
展开
-
【面试攻略】服务端面试-边锋
redis做排行榜什么容器战斗说说你自己搭的架构全球同服的架构数据库日志量很大的问题你开发中遇到让你记忆很深的问题go 和 redis 你熟悉吗说一说你熟悉的架构monggoDB和MySQL区别登录流程哪些数据库优化拍卖聊天版本管理战斗是你做的吧redis排行榜哪些地方用了多线程充值内存泄漏UDP用过吗,TCP/UDP区别...原创 2022-02-02 14:48:51 · 919 阅读 · 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 · 549 阅读 · 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 · 708 阅读 · 1 评论 -
【手游项目5】skynet-2
GateServerGate 只负责读取外部数据,但不负责回写。也就是说,向这些连接发送数据不是它的职责范畴。作为示范,skynet 开源项目实现了一个简单的回写代理服务,叫做 service_client 。启动这个服务,启动时绑定一个 fd ,发送给这个服务的消息包,都会被加上两字节的长度包头,写给对应的 fd 。根据不同的分包协议,可以自己定制不同的 client 服务来解决向外部连接发送数据的模块。https://github.com/xzhovo/skynet-websocket-gat.原创 2020-12-24 16:59:03 · 482 阅读 · 1 评论 -
【手游项目5】skynet-1
skynet 概述Skynet 的核心功能就是发送消息和处理消息充分利用多核优势,将不同的业务放在独立的执行环境中处理,协同工作,Lua State 已经提供了良好的沙盒,隔离不同执行环境;多线程模式,可以使得状态共享、数据交换更加高效。https://blog.codingnow.com/2012/09/the_design_of_skynet.htmlhttps://blog.youkuaiyun.com/SnailCpp/article/details/807217561.为了提供高效的服务间通讯.原创 2020-12-24 16:56:03 · 310 阅读 · 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 · 314 阅读 · 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 · 515 阅读 · 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 · 108 阅读 · 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 · 172 阅读 · 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 · 658 阅读 · 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 · 239 阅读 · 0 评论 -
【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 · 237 阅读 · 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 · 286 阅读 · 0 评论 -
C++-发现内存泄漏方法+解决玩家网络卡的问题
1.发现内存泄漏方法用一个静态变量来记录这个类当前存活的数量,在需要监控的类的基类的构造函数里计数+1,在析构函数里计数-1。2.在WP微信中是如何发现内存泄漏的。WP微信使用对象计数的方式来初步发现内存泄漏,如果已经离开一个页面,但这个页面仍然有存活的实例,那么就说明这个页面发生泄漏了。可见要发现UI的内存泄漏,还是很容易的。怎么解决玩家网络卡的问题1.客户端插值(解决卡顿):当客户端A收到服务端发来的玩家B的位置,不是直接瞬移到数据包中指定的位置 ,而是使用插值的方法平滑地插值到新的位置转载 2020-10-28 23:02:27 · 219 阅读 · 0 评论 -
C++面试基础篇2
原文链接https://segmentfault.com/a/1190000037494080?utm_source=sf-related转载的,说说我的个人感受吧,我知道这些是基础知识,知道这些基础当然最好了可是我想说的是大哥我是一个游戏服务端开发,我面向的是游戏玩家,我使用的是开发软件。你给我整那些stl源码?Linux内核?我的用户不是程序员,我不是开发电脑系统,也不是开发VS这样的编程软件。如果你们觉得我只懂得应用这些软件,不知道...转载 2020-10-24 22:48:16 · 134 阅读 · 0 评论 -
我对服务器架构的几种设计的思考,以及他们优缺点
我对服务器架构的几种设计的思考,以及他们优缺点1.分线设计(诛仙端游-单服上万人同时在线)clien gameserver worldServer DBServer多个游戏逻辑服,分线设计,通过worldServer切换线,基本上游戏的所有功能都在这里,不同线的玩家可以聊天但是相互看不到,要换线才能在一起做任务。组队,工会,开服,跨服活动需要做在worldServer优点,因为gameserver可以多开,所以承载上有优势缺点,1.需要跨越gameserver的开发就麻烦一点,...原创 2020-10-23 16:09:54 · 361 阅读 · 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 · 1308 阅读 · 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 · 901 阅读 · 3 评论 -
multivisor安装
.h部分代码//红包结构体struct tagRedPacket { tagRedPacket() { ReSet(); } void ReSet() { ZeroMemory(this, sizeof(tagRedPacket)); } LONGLONG lTime; //发红包的时间 WORD wId; //红包id DWORD ...原创 2019-08-16 16:42:06 · 3587 阅读 · 0 评论 -
[h5棋牌项目]-01-第一天-网狐框架环境安装
后端安装vs2012 vs2017xp编译环境VS2012开发可运行在win7和xP的程序 https://blog.youkuaiyun.com/wangcg123/article/details/49506251直接电脑管家搜索Visual Studio 2012 update 1在线安装服务器启动cd D:\server\Run\ReleaseCentralServer.exeH...原创 2019-05-27 11:15:00 · 1840 阅读 · 0 评论 -
[手游项目3]-5-游戏登录排队
游戏登录排队主要是考虑排名的性能问题,很多插入删除查询操作go的map是无序的不好做排名而数组查询效率低需要一个有序的map,有序的map可以保证先进先出,顺序不会被打乱但是名次问题需要一个的算法login_que.go 实现有序mappackage serviceimport ( "container/list" "time")var MapService = Ne...原创 2019-03-13 10:13:19 · 880 阅读 · 0 评论 -
网络技术之BGP
https://blog.youkuaiyun.com/share_technology_go/article/details/48060139BGP与BGP机房 国内网络运营商的主流网关解决方案 https://www.cnblogs.com/zedosu/p/6555250.htmlhttps://www.cnblogs.com/Anker/p/8166294.html ...转载 2019-02-21 11:31:36 · 257 阅读 · 0 评论 -
[手游项目2]-16-linux启动进程并保存进程id到文件
kill -9 $(netstat -nlp | grep :4567 | awk '{print $7}' | awk -F"/" '{ print $1 }')sleep 1nohup `pwd`/DBCache &echo "$!" > pid_DBCachesleep 1nohup `pwd`/WorldServer &echo "$!" > p...原创 2019-01-02 14:10:45 · 415 阅读 · 0 评论 -
[手游项目2]-23-游戏数据存储解决方案
游戏后台数据存储解决方案 https://www.jianshu.com/p/e857b49fc82f游戏服务器关于玩家数据的解决方案 https://blog.youkuaiyun.com/littleschemer/article/details/53037275游戏服务器学习之路--数据存储 https://www.cnblogs.com/xitang/archive/2011/06/06/20...转载 2018-10-31 17:52:24 · 533 阅读 · 0 评论 -
[手游项目2]-18-linux程序安全退出
killall -2 Gate #ifndef WIN32//信号函数不能调用标准IO库函数void SigInt(int nSigNo){ //gLog.WriteLog(enLogType_Error,"Error: program recv SIGINT signal, will exit"); //gServerRun = false; GlobleDBCache::I...原创 2018-10-09 20:46:25 · 225 阅读 · 0 评论 -
[手游项目2]-15-单引号导致mysql存储失败问题
//过滤特殊字符会导致数据库存储失败inline bool CheckNameVaild( const char* pStrName ){ int nLen = strlen(pStrName); if(nLen < 1) return false; for (int i=0; i < nLen; i++) { char c = pStrName[i];...原创 2018-09-13 17:55:11 · 223 阅读 · 0 评论 -
[手游项目2]-14-linux下如何用C语言编程判断某端口是否被占用
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>#include <sys/socket.h>#include <netinet/in.h>#define MAXLINE 80int main(void)...转载 2018-09-06 22:08:11 · 764 阅读 · 0 评论 -
[手游项目2]-13-mysql代码自动建表
自动创建表static std::string m_SqlTable = "create table if not exists log_counter_%d(\`Id` int(11) NOT NULL AUTO_INCREMENT,\`ServerId` int(11) DEFAULT NULL,\`nType` int(11) NOT NULL DEFAULT '0' COMME...原创 2018-08-30 14:10:46 · 223 阅读 · 0 评论 -
[手游项目2]-12-min 到max随机n个不同的数
#include <Windows.h>#include <vector>int Rand(int from,int to){ int nDec, nMin; if (from > to) { nDec = from - to + 1; nMin = to; } else { nDec = to - from ...原创 2018-08-30 14:04:16 · 184 阅读 · 0 评论 -
DebugBreak
1.按住ALT不要松开的同时输入426992.这是希腊字母兰布达(拉姆达) 智能ABC,右键输入法上的小键盘,选择希腊字母,再按s就可打出。转载 2016-11-11 22:02:59 · 1658 阅读 · 0 评论 -
让程序在崩溃时输出Dump文件
X转载 2016-11-09 09:23:35 · 3002 阅读 · 0 评论 -
捕捉程序崩溃事件的方法
#include #include // 处理Unhandled Exception的回调函数 // LONG ApplicationCrashHandler(EXCEPTION_POINTERS *pException) { // 在这里添加处理程序崩溃情况的代码 // 现在很多软件都是弹出一个发送错误报告的对话框 // 这里以弹出一个错误对话框并退出原创 2016-11-08 21:31:38 · 1262 阅读 · 1 评论 -
Workbench使用教程
点击打开链接转载 2016-10-17 10:42:16 · 5640 阅读 · 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 · 1871 阅读 · 0 评论 -
数据库设计软件 power designer
PowerDesigner是Sybase公司的CASE工具集,使用它可以方便地对管理信息系统进行分析设计,它几乎包括了数据库模型设计的全过程。 利用PowerDesigner可以制作数据流程图、概念数据模型、物理数据模型,可以生成多种客户端开发工具的应用程序,还可为数据仓库制作结构模型,也能对团队设备模型进行控制。 它可与许多流行的数据库设计软件,例如:PowerBuilder,Delph转载 2016-10-06 11:47:43 · 685 阅读 · 0 评论 -
数据库合并工具 esql
SQL语言是非过程化语言,大部分语句的执行与其前面或后面的语句无关,而一些高级编程语言都是基于如循环,条件等结构的过程化语言,尽管SQL语言非常有力,但它却没有过程化能力·若把SQL语言嵌入到过程化的编程语言中,则利用这些结构,程序开发人员就能设计出更加灵活的应用系统,具有SQL语言和高级编程语言的良好特征,它将比单独使用SQL或C语言具有更强的功能和灵活性·点击打开链接点击打开链接转载 2016-09-24 09:54:07 · 1368 阅读 · 0 评论 -
在游戏中实现语音聊天和语音转化成文字
现在很多手机游戏中的聊天系统都加入语音聊天的功能,相比于传统的文字聊天,语音聊天在MMORPG中显得尤为重要,毕竟直接口头交流总比你码字快得多了,也更直观些。 在游戏中实现语音聊天和语音转化成文字 点击打开链接游戏的语音通话解决方案 点击打开链接Unity3D 实现简单的语音聊天 点击打开链接转载 2016-09-22 12:23:45 · 3170 阅读 · 0 评论 -
VS2008项目移植到Linux
VS2008项目移植到Linux 点击打开链接用vs2008编写和调试linux程序 ----VisualGDB 使用教程 点击打开链接【VSCode】Ubuntu下VSC编译运行c++程序 点击打开链接在Ubuntu中安装Visual Studio Code 点击打开链接Ubuntu下的VSCode 点击打开链接技巧:Ubuntu中安装Visual Stud转载 2016-03-14 14:52:13 · 3392 阅读 · 0 评论 -
是跨平台的开发 Qt Creator
Qt Creator是跨平台的 Qt IDE, Qt Creator 是 Qt 被 Nokia 收购后推出的一款新的轻量级集成开发环境(IDE)。此 IDE 能够跨平台运行,支持的系统包括 Linux(32 位及 64 位)、Mac OS X 以及 Windows。根据官方描述,Qt Creator 的设计目标是使开发人员能够利用 Qt 这个应用程序框架更加快速及轻易的完成开发任务。Q原创 2016-03-12 11:47:55 · 1417 阅读 · 0 评论 -
[手游新项目历程]第2天-webSocket资料
如何在C++中使用WebService 点击打开链接原创 2016-03-12 11:44:32 · 2047 阅读 · 0 评论