md5值 作为mapstring,time_t键值

2024-08-29 02:32
文章标签 time 键值 md5 mapstring

本文主要是介绍md5值 作为mapstring,time_t键值,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在后台 服务器处理客户端发过来的数据时,由于通信网络传输 较差,实际收到了客户端的数据并进行了处理,给出了回应,但客户端由于网络原因判断为该条消息未发送成功,而重发。则服务器程序必须做出去重。
观察 实际解析到的消息结构体 如下
typedef struct
{time_t m_c_time,string m_localid,string m_buddyid,string m_msg,
}msg_info;

time 对多个msg_info实际并不唯一,所以 要根据 time_t m_c_time,
string m_localid, string m_buddyid,这三个参数生成一个md5值作为唯一的map索引(因为要求快速响应速度)
所以 将生成的md5值转化为string,作为map的key

将 time_t作为时间标记,作为 map的value

具体代码如下

    static std::map<string,time_t> s_chat_indentity;string md5Index;char md5buf[33];bzero(md5buf,33);int nLen =0;for(int i =0;i< 16;i++){nLen += sprintf(md5buf+nLen,"%x",0xff&(md5Str[i]));// no "%02x"}
//实际生成的md5值以16进制打印出来的字符串 包含有0,所以不能用 "%02x",补齐md5Index = md5buf;time_t curtime;time(&curtime);std::map<string,time_t>::iterator it = s_chat_identify.find(md5Index);if(it != s_chat_identify.end()){s_chat_identify[md5Index]= curtime;//更新 md5 对应记录的最后一次出现的时间return false;}if(s_chat_identify.size() >= MAX_MAP_COUNT){for(map<string,time_t>::iterator it = s_chat_identify.begin();it!= s_chat_identify.end();){if(curtime - it->second > MAX_TIME_DIF){s_chat_identify.erase(it++);
//对map的时间值进行排序耗时太大,所以改 选择 找出 时间差超过限制的老记录删除之
//另外 map的迭代器删除和vector的顺序存储容器不一样}else{++it;}}       }if(s_chat_identify.size() >= MAX_MAP_COUNT_LIMIT){s_chat_identify.erase(s_chat_identify.begin());//超过map的最大限,则选择删除 最开始的PRINT_LOG(__FILE__,__LINE__,ERROR_LEVEL,-1,"random del first record, map size is too larger : %d", s_chat_identify.size());}s_chat_identify.insert(pair<string, time_t>(md5Index, curtime));

这篇关于md5值 作为mapstring,time_t键值的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1116590

相关文章

linux 下Time_wait过多问题解决

转自:http://blog.csdn.net/jaylong35/article/details/6605077 问题起因: 自己开发了一个服务器和客户端,通过短连接的方式来进行通讯,由于过于频繁的创建连接,导致系统连接数量被占用,不能及时释放。看了一下18888,当时吓到了。 现象: 1、外部机器不能正常连接SSH 2、内向外不能够正常的ping通过,域名也不能正常解析。

C# Hash算法之MD5、SHA

MD5我们用的还是比较多的,一般用来加密存储密码。但是现在很多人觉MD5可能不太安全了,所以都用上了SHA256等来做加密(虽然我觉得都差不多,MD5还是能玩)。 还是跟上一篇说的一样,当一个算法的复杂度提高的同时肯定会带来效率的降低,所以SHA和MD5比较起来的话,SHA更安全,MD5更高效。 由于HASH算法的不可逆性,所以我认为MD5和SHA主要还是应用在字符串的"加密"上。 由于

python内置模块datetime.time类详细介绍

​​​​​​​Python的datetime模块是一个强大的日期和时间处理库,它提供了多个类来处理日期和时间。主要包括几个功能类datetime.date、datetime.time、datetime.datetime、datetime.timedelta,datetime.timezone等。 ----------动动小手,非常感谢各位的点赞收藏和关注。----------- 使用datet

Android的登陆MD5加密

1:导入代码 public class MD5Util {private static final String TAG = "MD5Util";/**** MD5加码 生成32位md5码*/public static String string2MD5(String inStr) {Log.e(TAG, "string2MD5: -------------------------");Mess

lua data time

local getTime = os.date(“%c”); 其中的%c可以是以下的一种:(注意大小写) %a abbreviated weekday name (e.g., Wed) %A full weekday name (e.g., Wednesday) %b abbreviated month name (e.g., Sep) %B full month name (e.g., Sep

Redis 命令不区分大小写,键值区分大小写Redis

今天才知道   Redis 命令不区分大小写   但键值区分大小写的

Event Time源码分析

《2021年最新版大数据面试题全面开启更新》 flink 中Processing Time也就是处理时间在watermark定时生成、ProcessFunction中定时器与时间类型的窗口中都有使用,但是其内部是如何实现注册定时器、如何调用、如何容错保证在任务挂掉在下次重启仍然能够触发任务执行,都是我们今天的主题。首先需要了解一下在flink内部时间系统是由哪些类来共同完成这件事,下面画

js中怎样对“abc”进行MD5、sha256哈希计算?

在 JavaScript 中,可以使用 CryptoJS 库来进行 MD5 哈希计算。首先,你需要在 HTML 文件中导入 CryptoJS 库,例如: <script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.9-1/crypto-js.min.js"></script> 然后,在 JavaScript 文件中,可

大数据-121 - Flink Time Watermark 详解 附带示例详解

点一下关注吧!!!非常感谢!!持续更新!!! 目前已经更新到了: Hadoop(已更完)HDFS(已更完)MapReduce(已更完)Hive(已更完)Flume(已更完)Sqoop(已更完)Zookeeper(已更完)HBase(已更完)Redis (已更完)Kafka(已更完)Spark(已更完)Flink(正在更新!) 章节内容 上节我们完成了如下的内容: 滑动窗口:时间驱动、事件

DS简记1-Real-time Joint Object Detection and Semantic Segmentation Network for Automated Driving

创新点 1.更小的网络,更多的类别,更复杂的实验 2. 一体化 总结 终于看到一篇检测跟踪一体化的文章 网络结构如下: ResNet10是共享的Encoder,yolov2 是检测的Deconder,FCN8 是分割的Deconder。 其实很简单,论文作者也指出:Our work is closest to the recent MultiNet. We differ by focus