本文中的算法采用twitter的snowflake算法,具体请搜索介绍,原来是用Scala写的,因我项目需要,改写成C++语言,主要用于高效的生成唯一的ID, 核心算法就是毫秒级时间(41位)+机器ID(10位)+毫秒内序列(12位).

网上也有好多PHP写的插件模块,核心用了网络通讯将生成的ID发送给PHP使用,没深入研究PHP的模块写法。

废话不多说了,还是直接上代码好了。

uuid.h

#ifndef __UTIL_UUID_H__
#define __UTIL_UUID_H__#include <stdint.h>namespace utils
{
// twitter snowflake算法
// 64       63--------------22---------12---------0
// 符号位   |     41位时间   |10位机器码|12位自增码|
extern uint64_t get_time();class unique_id_t
{
public:unique_id_t();~unique_id_t();void set_epoch(uint64_t epoch);void set_machine(int32_t machine);int64_t generate();private:uint64_t epoch_;uint64_t time_;int32_t machine_;int32_t sequence_;
};}#endif // !__UTIL_UUID_H__

uuid.cpp

#include "uuid.h"
#if defined(__GUNC__)
#include <sys/time.h>
#include <unistd.h>
#define EPOCHFILETIME 11644473600000000ULL
#else
#include <windows.h>
#include <time.h>
#define EPOCHFILETIME 11644473600000000Ui64
#endifnamespace utils
{uint64_t get_time(){
#ifdef __GUNC__struct timeval tv;gettimeofday(&tv, NULL);uint64 time = tv.tv_usec;time /= 1000;time += (tv.tv_sec * 1000);return time;
#elseFILETIME filetime;uint64_t time = 0;GetSystemTimeAsFileTime(&filetime);time |= filetime.dwHighDateTime;time <<= 32;time |= filetime.dwLowDateTime;time /= 10;time -= EPOCHFILETIME;return time / 1000;
#endif}unique_id_t::unique_id_t(){epoch_ = 0;time_ = 0;machine_ = 0;sequence_ = 0;}unique_id_t::~unique_id_t(){}void unique_id_t::set_epoch(uint64_t epoch){epoch_ = epoch;}void unique_id_t::set_machine(int32_t machine){machine_ = machine;}int64_t unique_id_t::generate(){int64_t value = 0;uint64_t time = get_time() - epoch_;// 保留后41位时间value = time << 22;// 中间10位是机器IDvalue |= (machine_ & 0x3FF) << 12;// 最后12位是sequenceIDvalue |= sequence_++ & 0xFFF;if (sequence_ == 0x1000){sequence_ = 0;}return value;}
}#ifdef __TEST__
#include <iostream>
void test()
{utils::unique_id_t* u_id_ptr = new utils::unique_id_t();u_id_ptr->set_epoch(uint64_t(1367505795100));u_id_ptr->set_machine(int32_t(100));for (int i = 0; i < 1024; ++i){std::cout << u_id_ptr->generate() << std::endl;;}
}
#endif

这样的唯一ID就可以用来表示你系统中使用的例如物品唯一ID,坐骑唯一ID等等数据,方便记录和追踪。

转载请注明:C++爱好者博客 » 网游服务器中的GUID(唯一标识码)实现-基于snowflake算法

网游服务器中的GUID(唯一标识码)实现-基于snowflake算法相关推荐

  1. 网游服务器通信架构设计

    随着网游从业者的规模和需求不断扩大,越来越多的朋友进入了网游开发这个领域,使得市场中网游开发技术相关的需求量迅猛增长.目前,网游行业比较紧缺的是具有较深技术功底的"专家型"开发者, ...

  2. 一些关于网游服务器的东东

    拼包函数及网络封包的异常处理(含代码) 本文作者:sodme 本文出处:http://blog.csdn.net/sodme 声明:本文可以不经作者同意任意转载.复制.传播,但任何对本文的引用都请保留 ...

  3. 网游服务器通信架构的设计

    转自:http://www.cppblog.com/jack-wang/archive/2009/01/02/70963.aspx 随着网游从业者的规模和需求不断扩大,越来越多的朋友进入了网游开发这个 ...

  4. 无缝世界网游服务器架构的设计思路

    过去一年中,花了很多时间在考虑服务器架构设计方面的问题.看了大量文章.也研究了不少开源项目,眼界倒是开阔了不少,不过回过头来看,对网游架构设计方面的帮助却是不多.老外还是玩儿console game的 ...

  5. 组装网游服务器,网游服务器的搭建

    网游服务器的搭建 谈完网游服务器的选购之后,我们就开始考虑网游服务器的具体搭建问题了. 网游服务器在网络中并不单指网游服务器本身,而是包括登陆服务器.网关服务器.游戏服务器和数据库服务器.有的服务器可 ...

  6. 宝德网吧服务器型号,14款网吧、网游 服务器横向评测

    随着近年来网吧连锁经营与网络游戏产业的蓬勃发展,网吧专用服务器和网络游戏服务器的需求量也随之迅速增长.为此,<中国计算机报>联合赛迪评测共同组织了本次网吧.网游服务器横向评测,希望为用户采 ...

  7. 【无缝世界】无缝世界网游服务器架构的设计思路

    过去一年中,花了很多时间在考虑服务器架构设计方面的问题.看了大量文章.也研究了不少开源项目,眼界倒是开阔了不少,不过回过头来看,对网游架构设计方面的帮助却是不多.老外还是玩儿console game的 ...

  8. 【转】无缝世界网游服务器架构的设计思路

    原文:http://jinghuainfo.iteye.com/blog/1192805 过去一年中,花了很多时间在考虑服务器架构设计方面的问题.看了大量文章.也研究了不少开源项目,眼界倒是开阔了不少 ...

  9. 黑客操纵“肉鸡” 攻击网游服务器

    "黑客"家中自学计算机网络课程后,远程连接异地服务器网上抓取大量"肉鸡",出租给买家,而买家利用这些"肉鸡",发动DDOS攻击网游公司服务器 ...

最新文章

  1. 01ts简介和相关配置
  2. Java并发教程–可调用,将来
  3. ModChip and more
  4. __name__ == ‘__main__‘的原理
  5. 计算机仿真保密,量子密钥分配方案的安全性研究及其计算机仿真
  6. 一步一步写算法(之字符串查找 中篇)
  7. tensorflow 卷积:设定特定卷积核
  8. [LeetCode] NO. 349 Intersection of Two Arrays
  9. 整理 Mac 安装 oracle
  10. 自动驾驶 2-1 传感器和计算硬件 Sensors and Computing Hardware
  11. c语言求利用麦克劳林公式求sinx值,用泰勒公式求sin(x)的近似值
  12. 操作系统:手把手带你扫盲 操作系统 的那些必知必会!
  13. 逻辑右移、算术右移与循环逻辑右移
  14. ARM体系架构—ARMv7-A处理器模式及寄存器
  15. word无法验证服务器,Win8系统打开office文件提示“无法验证此产品的许可证”如何解决...
  16. A. Binary Decimal acii码 字符 数字的转换 vector容器 sort 排序
  17. 你好你好你好你好你好你好
  18. 现代企业管理——【ERP管理】
  19. 全球定位系统和惯性系统在高速公路上的高精密定位
  20. Kafka ISR与OSR 设计原则

热门文章

  1. uview 瀑布流_微信小程序瀑布流最好最简单的解决方案
  2. 百货商场会员营销/购物中心会员系统经典案例
  3. OC 获取view相对位置_电脑DIY 篇九十七:万元内预算上30显卡,10700散片配耕升RTX3070炫光OC显卡装机推荐_搜狐汽车...
  4. 教资科目一如何备考?
  5. 车速与档位匹配关系_档位与车速的匹配方法,档位和车速怎么匹配?
  6. 腾讯微服务框架TSF简介
  7. erp异地组网,为中小企业影楼实现互联互通!
  8. [WF]C语言入门2
  9. 启扬智能:智能电子公交站牌遍地开花,助推智慧交通加速发展
  10. 2020-2-25(93)