自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(46)
  • 资源 (2)
  • 收藏
  • 关注

原创 个人 vim 配置备份

set nocompatible " be iMproved, requiredfiletype off " required" 在 vim 中使用 :PlugInstall 安装call plug#begin('~/.vim/plugged')Plug 'terryma/vim-expand-region'Plug 'fatih/vim-go'Plug 'neoclide/coc.nvim', {'branch': 'releas...

2020-09-06 11:25:09 321

原创 使用 redis zset 保存 IM 聊天消息并判断消息可靠到达客户端

在服务端,用户收到的聊天消息,用一个 redis zset 保存,把聊天内容作为 member, 服务器时间戳当做 redis zset 的 score, 这样就可以对聊天记录进行排序其他人向用户发送聊天消息时,服务端先把聊天消息保存到 redis zset 中,然后再下发给客户端客户端每收到一个聊天消息,就把聊天消息的时间戳回复给服务器,这样服务器就能确认客户端读取了聊天消息服务端要记录...

2019-11-18 17:51:35 1957

原创 IM 朋友圈后台存储设计

数据库表设计存储用户发的微博 weiboCREATE TABLE weibo ( id bigint(20) NOT NULL AUTO_INCREMENT, account_id bigint(20) NOT NULL, photos_bin blob, msg_content varchar(2048) DEFAULT NULL, srv_timestamp bigint(20) NO...

2019-11-08 19:17:22 690

原创 记一次单机 pulsar 排查经历

今天服务器启动的时候,无法订阅单机 pulsar 的 Exclusive subscription 主题,表明有其他订阅者订阅了此主题;为了找到这个订阅者在哪个 IP, 在运行 pulsar 的机器上做了如下排查1. 找到主题的 brokerpulsar-admin persistent lookup persistent://public/default/topicDev返回的结果是...

2019-10-16 17:36:03 744

原创 在单机上使用 docker-compose 部署 etcd v3 集群

假设 centos 服务器公网地址为 192.168.6.1321安装 Docker-ce(省略)2安装 Docker-Composeyum -y install epel-releaseyum -y install python-pip确认版本pip --version更新pippip install --upgrade pip安装docker-composepi...

2019-10-08 17:33:09 1564

原创 修改 xorm templates/goxorm/config 文件,以生成支持反射 json 格式的 go 语言数据库表结构体

设置 config 文件中的 genJson=1,生成的数据库表结构体就带 json 字样例如type account struct { Id int64 `json:"id" xorm:"autoincr index BIGINT(20"`//.....}如果 config 文件中的 genJson=0,生成的数据库表结构体就不带 json 字样type ...

2019-09-12 16:03:28 353

原创 在 ubuntu desktop 18.04 上搭建 pulsar-client-go V2.3.2 开发环境

1在http://pulsar.apache.org/docs/en/client-libraries-cpp/中下载 dep 包并安装2在 /etc/profile 中增加下面几个配置export GOPROXY=https://athens.azurefd.netexport GO111MODULE=on保存后, 执行 source /etc/profile...

2019-06-13 16:38:47 573

原创 使用 etcd 和 redis 实现全国同服游戏的负载均衡,服务器弹性伸缩, 灰度发布

概述:每个玩家在游戏中都有唯一编号, 称为 roleID参与开发的全国同服游戏,每个游戏逻辑服务器( 以下简称 game ) 都是一个平行世界,每个 game 都有唯一编号: gameID, 玩家同一时刻只能登录到一个 game 中;可以使用 redis setnx 保存 roleID - gameID, 来确保某段时间内玩家登录到同一个指定的game, 以杜绝多终端登录同一帐号的风险; 在此...

2018-07-14 15:11:52 3210 4

原创 消息队列 nsq 使用笔记

在远程机器 192.168.1.16 上启动 nsqlookupd, nsqadminnohup ./nsqlookupd &nohup ./nsqadmin --lookupd-http-address=127.0.0.1:4161 &nsqlookupd 占用 4161 端口有两个接口:TCP 端口(4160),nsqd 用它来广播。HTTP 端口(4161),客户端用它来发现...

2018-04-08 17:32:12 2144

原创 twitter 雪花算法 golang 实现

// twitter 雪花算法// 把时间戳,工作机器ID, 序列号组合成一个 64位 int// 第一位不用, [2,42]这41位存放时间戳,[43,52]这10位存放机器id,[53,64]最后12位存放序列号

2017-04-14 20:55:28 2415

原创 安装若干 VIM 插件(不断更新)

先安装插件管理工具 pathogen创建目录 ~/.vim/bundle/pathogen/autoload/下载 pathogen.vim(https://github.com/tpope/vim-pathogen )至 ~/.vim/bundle/pathogen/autoload/在 .vimrc 中加入下面两行runtime bundle/pathogen/autoload/pathoge...

2017-04-01 16:49:22 5579

原创 linux 下编译 boost 的笔记

编译./bootstrap.sh cxxflags="-std=c++11 -stdlib=libc++" --with-toolset=clang ./b2 cxxflags="-std=c++11 -stdlib=libc++" linkflags="-stdlib=libc++" toolset=clang -a -q安装sudo ./b2 ins

2016-02-06 20:05:58 1532

原创 C++ 操作mongodb 的代码汇总

mongodb 是UTF8格式, 所以存储中文的时候, 需要先将中文转换为 UTF8 格式bool MB_To_UTF8( const std::string& strIn, std::string& strOut ){    strOut.clear();    int nInputLen = MultiByteToWideChar( CP_ACP, 0, strIn

2015-12-04 18:01:54 6638 1

原创 使用 boost 解析 XML 文件中的节点属性

参考来源http://stackoverflow.com/questions/14010473/parsing-xml-attributes-with-boost花了两小时,总算解析出来,为了避免遗忘做个笔记XML 文件 TaskCfg.xml 内容如下                                       

2015-11-20 16:16:50 4042

原创 安装 youcompleteme 插件

安装时间可以拿来睡个午觉 sudo apt-get install build-essential cmakesudo apt-get install python-devcd ~/.vim/bundle/git clone https://github.com/Valloric/YouCompleteMe.gitcd YouCompleteMe///  获取 YCM 的依...

2015-11-08 22:20:08 2529

原创 .vimrc 基本配置

" 定义快捷键的前缀,即<Leader>let mapleader=";"" 启用:Man命令查看各类man信息source $VIMRUNTIME/ftplugin/man.vim" 定义:Man命令查看各类man信息的快捷键nmap <Leader>man :Man 3 <cword><CR>" 映射之后就可以少按一下 S

2015-11-08 22:15:35 847

原创 Vim配色方案和字体设置

目前发现适合编程的配色方案是molokai,字体是 Droid Sans Mono for Powerline Nerd Font Complete.otf

2015-11-08 22:14:17 30693 1

原创 ubuntu 16 上源码编译安装VIM8

参考 https://github.com/Valloric/YouCompleteMe/wiki/Building-Vim-from-source**1 安装vim需要的库 sudo apt-get install libncurses5-dev libgnome2-dev libgnomeui-dev \    libgtk2.0-dev libatk1.0-dev libbonoboui2-...

2015-11-08 22:11:22 1945

原创 源码编译安装 clang

参考文章https://solarianprogrammer.com/2013/01/17/building-clang-libcpp-ubuntu-linux/安装好 ubuntu 后,打开终端, 依次输入下面几条命令1.sudo apt-get updatesudo apt-get upgradesudo apt-get install g++ subver

2015-11-08 14:38:58 4366

原创 VS2015下编译 MONGODB 驱动

参考来源:https://github.com/mongodb/mongo-cxx-driver/wiki/Download-and-Compile-the-Legacy-Driver#building-on-windowshttp://m.blog.csdn.net/blog/nwzhourui/48289047http://blog.csdn.net/aslucky/article

2015-11-04 10:30:03 4206

转载 SQL to Mongo Shell to C++ ( 备忘 )

原帖地址http://www.cppblog.com/xylyan/archive/2012/06/11/178422.aspxSQL to Mongo Shell to C++MongoDB的查询表示为JSON(BSON)对象。此快速参考图表显示了作为SQL的例子,Mongo shell 语法,Mongo的C + +

2015-09-23 16:26:42 713

原创 在 ubuntu14.04 上安装 clang 3.6

本文所有操作来自下面两篇博客http://www.cnblogs.com/ralphjzhang/archive/2011/12/02/2272671.html https://github.com/hh8456/use_vim_as_ide/blob/master/README.md#7.1.1 使用预编译的 clang http://llvm.org/r

2015-09-17 21:02:01 27337

原创 基于mongodb, 设计游戏中的个人背包系统

本着高效简洁的目的, 根据 这本书做指导, 数据库设计遵循下面两条规则规则 1:  预先分配磁盘空间并填充空白数据规则 2:  文档要自给自足。数据的计算是由 C++ 客户端程序( 这里的客户端程序不是指游戏客户端, 是指数据库服务器)来完成,若查找的信息需要经过计算且无法从文档中获得, 就会付出高昂的性能代价,优化文档使得这些计算信息能从文档中直接获得///////

2015-07-06 20:28:43 5402

原创 游戏中的名字随机生成代码

{CSDN:CODE:dsf}

2014-07-10 17:52:12 18953 1

翻译 关闭nagel算法

原文出处http://www.xtremesystems.org/forums/showthread.php?237964-Gaming-Tweak!!!!-disable-nagle-s-algorithm游戏调整 —— 关闭 nagel 算法下面的设置可以调整或禁用 nagel 算法。禁用 nagel 算法以后, 允许很小的包没有延迟立即发送。建议对某些游戏关闭 nagel

2013-12-04 21:06:16 4621

原创 使用多维数组在游戏中保存归类数据

游戏中的装备有不同的颜色(白绿蓝黄), 不同的职业需求(战士专用, 法师专用....), 不同的等级需求(某些装备需要达到 N 级才能穿戴), 不同的佩戴部位(头盔, 护手, 胸甲.......), 且每种装备有唯一编号(装备 ID 号)把装备信息加载到内存中, 按照特定条件查询某类装备集合( 比如查找 战士专用, 绿色, 20级才能穿戴, 头盔..... ), 使用 for 循环来查找的方式

2013-12-04 21:03:08 1112

转载 C语言中多维数组的理解

[cpp] view plaincopyprint?  [cpp] view plaincopyprint?/*Ryan-jiangfeng*/    #include     #define ROW 4  #define COL 2  int main(void) 

2013-07-26 15:12:09 989

原创 自己封装的一个 TCP 套接字基类

TcpSocket.h #ifndef __CTCPSOCKET_H__#define __CTCPSOCKET_H__ #include enum OVER_TYPE { RECV_OVERLAPPED, SEND_OVERLAPPED, BOTH_OVERLAPPED };enum OPER_TYPE { RECV_POSTED, SEND_POSTED };e

2010-04-27 11:09:00 1529

原创 一个内存池代码

最近做服务器,需要把数千个客户端上发的数据保存起来;保存数据所使用的缓冲区,是从一个内存池里面取得的;客户端上发的数据,长度从几十字节至三四 k 不等(按照协议,数据长度最大为4k);如果内存池中的每片缓冲区的长度大小都使用4k,会造成空间浪费,因为客户端就算只上发几个字节的数据,也会占用一片4k的缓冲区;想了一下,就做了下面这个内存池来避免空间浪费;里面使用了8块大内存,每块内存依次按照 32字

2010-04-27 10:50:00 1426 2

原创 读写 unicode 文件

 (一)wifstream inf;inf.open(filename,ios::out);if( inf.eof()){ return;}wchar_t head[2];inf.seekg(0);inf.read(head,2);   if( (head[0] == 0xff && head[1]==0xfe )||(head[0]==0xfe&&head[1]==0xff))   { co

2010-04-06 23:12:00 1072

转载 结构体中使用的bit操作

毋庸置疑,位域的引入给用户的最大的好处莫过于可以有效的利用昂贵的内存和操作bit的能力了。而且这种操作bit位的能力很是方便,利用结构体域名即可对这些bit进行操作。例如:struct foo { int a : 1; int b : 2; short c : 1; };struct foo aFoo; aFoo.a = 1; aFoo.b = 3; aFoo.c = 0;通过

2010-03-16 15:26:00 6985

转载 深入学习C语言知识点checklist——测试你掌握C的程度

 字符串  学习时间:1.5W(“W”周,下同) 知识点checklist strlen()函数的返回值是什么类型的? 字符串strlen()的值,是否和他占据的内存空间相同? 你是否知道strcpy函数存在的潜在风险?如何避免? 如果一个字符串没有字符串结束符,而调用str开头的库函数,会发生什么? Strcpy(),strcat(),strcmp(),strncpy(),strncat(),s

2009-10-29 17:58:00 842

转载 堆和栈的区别(转贴,作者为一c++程序员,具体姓名不清楚)

 一、预备知识—程序的内存分配 一个由c/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)—> 由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 2、堆区(heap)—> 一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。 3、全局区(静态区)(static

2009-03-09 11:56:00 566

原创 一个windows临界区类(从同事手上拷贝过来的)

AutoCriticalSection.h#pragma once#include /*! * 自动加锁、解锁的临界区类*/ class CAutoCriticalSection{private :    CRITICAL_SECTION *m_pCS ;    //!public :    //! 构造函数    /*!    * 通过传入一个临界区对象的引用,实现对这个临界区的加锁

2009-02-26 09:59:00 935

原创 在同一个根目录下,给出一个〖参照路径〗,计算〖当前程序目录〗与〖参照路径〗的相对路径

 给朋友写的时候,顺便贴上来了开发环境为 vc8 + boost1.36比如给定参照路径为 "c://temp1//temp2",      程序所在目录为 "c://Documents and Settings//Administrator//桌面//boost练习//pathProcess",      则 〖当前程序目录〗与〖参照路径〗的相对路径:   ../../../../temp1/t

2008-12-01 00:55:00 1524

原创 棋牌游戏中的服务器洗牌函数

 BOOL makeRands(const int nCount, const DWORD* pInArray, DWORD* pOutArray){    if ( 0>=nCount || NULL==pInArray || NULL==pOutArray )    {        return FALSE;    }    // pOutArray[i] 表示 pInArray[i] 的位

2008-11-24 17:25:00 2256 1

原创 在两个目录中寻找差异文件

 开发环境VS2005 SP1,BOOST 1.36, STL, MarkUpSnap.h#pragma once class CSnap{ public: CSnap(void);  ~CSnap(void);  // 制作快照,并保存为 xml 文件 void SaveSnap( const char* szFileName );

2008-11-24 00:05:00 2013

原创 自己学习 boost 线程库时写的小代码

1.简介thread_specific_ptr class 定义了相关于线程的存储接口。很拗口,其实就是对TLS Thread-Locally Storage的包装。它可用于封装线程独立的全局变量。thread_specific_ptr 对象为每个线程保持一个指针,每个线程都应该new出一个对象交给thread_specific_ptr,当线程终结时,该对象释放。当线程初始化时,线

2008-10-14 00:03:00 2715

原创 宽字符串和标准字符串的转换

char* WstringToString( const WCHAR* pWString ){    if ( wcslen( pWString ) > 999 )    {       return NULL;    }     int nLen = WideCharToMultiByte( CP_ACP, 0, pWString, -1, NULL, 0, NULL

2008-08-24 22:07:00 1093

转载 超强的指针学习笔记

摘录的别人的: C语言所有复杂的指针声明,都是由各种声明嵌套构成的。如何解读复杂指针声明呢?右左法则是一个既著名又常用的方法。不过,右左 法则其实并不是C标 准里面的内容,它是从C标准的声明规定中归纳出来的方法。C标准的声明规则,是用来解决如何创建声明的,而右左法则是用来解决如何辩 识一个声明的,两者可 以说是相反的。右左法则的英文原文是这样说的: The right-left rule: S

2008-03-31 20:16:00 696

C++写的操作LUA的类

刚开始学LUA,2位网上认识的朋友,一人给了我一个操作LUA的C++类;其中一个类的实现代码是封装在 lib 里面的,很遗憾没有lib代码,但是能用。为了赚资源分,共享给兄弟们

2008-06-04

数据结构 c语言版(严尉敏)配书光盘 DSDemo

《数据结构(C语言版)》配书光盘 DSDemo<br><br>数据结构算法演示<br>使 用 手 册<br><br>一、 功能简介<br>本课件是一个动态演示数据结构算法执行过程的辅助教学软件, 它可适应读者对算法的输入数据和过程执行的控制方式的不同需求, 在计算机的屏幕上显示算法执行过程中数据的逻辑结构或存储结构的变化状况或递归算法执行过程中栈的变化状况。整个系统使用菜单驱动方式, 每个菜单包括若干菜单项。每个菜单项对应一个动作或一个子菜单。系统一直处于选择菜单项或执行动作状态, 直到选择了退出动作为止。<br><br>二、 系统内容<br>本系统内含84个算法,分属13部分内容,由主菜单显示,与《数据结构》教科书中自第2章至第11章中相对应。各部分演示算法如下:<br>1. 顺序表<br>(1)在顺序表中插入一个数据元素(ins_sqlist)<br>(2)删除顺序表中一个数据元素(del_sqlist)<br>(3)合并两个有序顺序表(merge_sqlist)<br>2. 链表<br>(1)创建一个单链表(Crt_LinkList)<br>(2)在单链表中插入一个结点(Ins_LinkList)<br>(3)删除单链表中的一个结点(Del_LinkList)<br>(4)两个有序链表求并(Union)<br>(5)归并两个有序链表(MergeList_L)<br>(6)两个有序链表求交(ListIntersection_L)<br>(7)两个有序链表求差(SubList_L)

2008-05-31

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除