- 博客(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
401
原创 使用 redis zset 保存 IM 聊天消息并判断消息可靠到达客户端
在服务端,用户收到的聊天消息,用一个 redis zset 保存,把聊天内容作为 member, 服务器时间戳当做 redis zset 的 score, 这样就可以对聊天记录进行排序其他人向用户发送聊天消息时,服务端先把聊天消息保存到 redis zset 中,然后再下发给客户端客户端每收到一个聊天消息,就把聊天消息的时间戳回复给服务器,这样服务器就能确认客户端读取了聊天消息服务端要记录...
2019-11-18 17:51:35
2150
原创 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
758
原创 记一次单机 pulsar 排查经历
今天服务器启动的时候,无法订阅单机 pulsar 的 Exclusive subscription 主题,表明有其他订阅者订阅了此主题;为了找到这个订阅者在哪个 IP, 在运行 pulsar 的机器上做了如下排查1. 找到主题的 brokerpulsar-admin persistent lookup persistent://public/default/topicDev返回的结果是...
2019-10-16 17:36:03
837
原创 在单机上使用 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
1636
原创 修改 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
390
原创 在 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
637
原创 使用 etcd 和 redis 实现全国同服游戏的负载均衡,服务器弹性伸缩, 灰度发布
概述:每个玩家在游戏中都有唯一编号, 称为 roleID参与开发的全国同服游戏,每个游戏逻辑服务器( 以下简称 game ) 都是一个平行世界,每个 game 都有唯一编号: gameID, 玩家同一时刻只能登录到一个 game 中;可以使用 redis setnx 保存 roleID - gameID, 来确保某段时间内玩家登录到同一个指定的game, 以杜绝多终端登录同一帐号的风险; 在此...
2018-07-14 15:11:52
3417
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
5583
原创 twitter 雪花算法 golang 实现
// twitter 雪花算法// 把时间戳,工作机器ID, 序列号组合成一个 64位 int// 第一位不用, [2,42]这41位存放时间戳,[43,52]这10位存放机器id,[53,64]最后12位存放序列号
2017-04-14 20:55:28
2472
原创 安装若干 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
5658
原创 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
1584
原创 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
6741
原创 使用 boost 解析 XML 文件中的节点属性
参考来源http://stackoverflow.com/questions/14010473/parsing-xml-attributes-with-boost花了两小时,总算解析出来,为了避免遗忘做个笔记XML 文件 TaskCfg.xml 内容如下
2015-11-20 16:16:50
4158
原创 安装 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
2567
原创 .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
898
原创 Vim配色方案和字体设置
目前发现适合编程的配色方案是molokai,字体是 Droid Sans Mono for Powerline Nerd Font Complete.otf
2015-11-08 22:14:17
30856
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
1996
原创 源码编译安装 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
4463
原创 VS2015下编译 MONGODB 驱动
参考来源:https://github.com/mongodb/mongo-cxx-driver/wiki/Download-and-Compile-the-Legacy-Driver#building-on-windowshttp://m.blog.youkuaiyun.com/blog/nwzhourui/48289047http://blog.youkuaiyun.com/aslucky/article
2015-11-04 10:30:03
4309
转载 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
745
原创 在 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
27484
原创 基于mongodb, 设计游戏中的个人背包系统
本着高效简洁的目的, 根据 这本书做指导, 数据库设计遵循下面两条规则规则 1: 预先分配磁盘空间并填充空白数据规则 2: 文档要自给自足。数据的计算是由 C++ 客户端程序( 这里的客户端程序不是指游戏客户端, 是指数据库服务器)来完成,若查找的信息需要经过计算且无法从文档中获得, 就会付出高昂的性能代价,优化文档使得这些计算信息能从文档中直接获得///////
2015-07-06 20:28:43
5613
翻译 关闭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
4905
原创 使用多维数组在游戏中保存归类数据
游戏中的装备有不同的颜色(白绿蓝黄), 不同的职业需求(战士专用, 法师专用....), 不同的等级需求(某些装备需要达到 N 级才能穿戴), 不同的佩戴部位(头盔, 护手, 胸甲.......), 且每种装备有唯一编号(装备 ID 号)把装备信息加载到内存中, 按照特定条件查询某类装备集合( 比如查找 战士专用, 绿色, 20级才能穿戴, 头盔..... ), 使用 for 循环来查找的方式
2013-12-04 21:03:08
1145
转载 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
1017
原创 自己封装的一个 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
1555
原创 一个内存池代码
最近做服务器,需要把数千个客户端上发的数据保存起来;保存数据所使用的缓冲区,是从一个内存池里面取得的;客户端上发的数据,长度从几十字节至三四 k 不等(按照协议,数据长度最大为4k);如果内存池中的每片缓冲区的长度大小都使用4k,会造成空间浪费,因为客户端就算只上发几个字节的数据,也会占用一片4k的缓冲区;想了一下,就做了下面这个内存池来避免空间浪费;里面使用了8块大内存,每块内存依次按照 32字
2010-04-27 10:50:00
1457
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
1117
转载 结构体中使用的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
7314
转载 深入学习C语言知识点checklist——测试你掌握C的程度
字符串 学习时间:1.5W(“W”周,下同) 知识点checklist strlen()函数的返回值是什么类型的? 字符串strlen()的值,是否和他占据的内存空间相同? 你是否知道strcpy函数存在的潜在风险?如何避免? 如果一个字符串没有字符串结束符,而调用str开头的库函数,会发生什么? Strcpy(),strcat(),strcmp(),strncpy(),strncat(),s
2009-10-29 17:58:00
893
转载 堆和栈的区别(转贴,作者为一c++程序员,具体姓名不清楚)
一、预备知识—程序的内存分配 一个由c/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)—> 由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 2、堆区(heap)—> 一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。 3、全局区(静态区)(static
2009-03-09 11:56:00
591
原创 一个windows临界区类(从同事手上拷贝过来的)
AutoCriticalSection.h#pragma once#include /*! * 自动加锁、解锁的临界区类*/ class CAutoCriticalSection{private : CRITICAL_SECTION *m_pCS ; //!public : //! 构造函数 /*! * 通过传入一个临界区对象的引用,实现对这个临界区的加锁
2009-02-26 09:59:00
968
原创 在同一个根目录下,给出一个〖参照路径〗,计算〖当前程序目录〗与〖参照路径〗的相对路径
给朋友写的时候,顺便贴上来了开发环境为 vc8 + boost1.36比如给定参照路径为 "c://temp1//temp2", 程序所在目录为 "c://Documents and Settings//Administrator//桌面//boost练习//pathProcess", 则 〖当前程序目录〗与〖参照路径〗的相对路径: ../../../../temp1/t
2008-12-01 00:55:00
1562
原创 棋牌游戏中的服务器洗牌函数
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
2306
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
2062
原创 自己学习 boost 线程库时写的小代码
1.简介thread_specific_ptr class 定义了相关于线程的存储接口。很拗口,其实就是对TLS Thread-Locally Storage的包装。它可用于封装线程独立的全局变量。thread_specific_ptr 对象为每个线程保持一个指针,每个线程都应该new出一个对象交给thread_specific_ptr,当线程终结时,该对象释放。当线程初始化时,线
2008-10-14 00:03:00
2767
原创 宽字符串和标准字符串的转换
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
1128
转载 超强的指针学习笔记
摘录的别人的: C语言所有复杂的指针声明,都是由各种声明嵌套构成的。如何解读复杂指针声明呢?右左法则是一个既著名又常用的方法。不过,右左 法则其实并不是C标 准里面的内容,它是从C标准的声明规定中归纳出来的方法。C标准的声明规则,是用来解决如何创建声明的,而右左法则是用来解决如何辩 识一个声明的,两者可 以说是相反的。右左法则的英文原文是这样说的: The right-left rule: S
2008-03-31 20:16:00
725
C++写的操作LUA的类
2008-06-04
数据结构 c语言版(严尉敏)配书光盘 DSDemo
2008-05-31
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人