关于message 消息分片 消息分片的发送 消息分片允许将多个消息封装成一条消息。在发送自定义协议数据时,我们经常需要在消息前“填充”一个包头。如下代码,在发送的时候加上zmq::send_flags::sndmore标识(对应zeromqZMQ_SNDMORE),表示后面还有消息。这样zeromq会将ZMQ_SNDMORE的消息和最后一段消息拼装成一条完整的消息发送。 intSendData(charpMsg,intiMsgLen) { tagMsgHeadstHead; bzero(&stHead,sizeof(stHead)); ... stHead.Len=iMsgLen; ...

  4TgGxjjE1CwY   2023年11月02日   38   0   0 C++

在使用zeromq退出的时候还遇到一点坑,对于服务deaman(守护进程)化的进程可能会遇到这个问题。 现象: 这个问题导致的现象是服务一旦关闭(stop),就会coredump,coredump的信息如下。意思大概是使用了无效的描述符。 (gdb)bt 00x00007f522e2le387inraise()from/lib64/libec.so.6 10x00007f522e21fbb8inabort()from/lib64/libec.so.6 20x00000000004d5909inzmq::zmq_abort(errmsg_errmsg_@entry=0x7f522e37025f...

  4TgGxjjE1CwY   2023年11月02日   34   0   0 C++

内存重叠是指在内存中存在两个或多个区域,它们的地址范围有交叉部分。在C中,内存重叠可能会导致程序出现不可预期的行为,因此我们需要了解它的原因和如何避免。 内存重叠的原因 内存重叠的主要原因是指针的使用。当我们使用指针访问内存时,如果指针指向的内存区域与另一个区域有交叉部分,就会产生内存重叠。 如下图,内存拷贝的两种情况: 第一种情况下,拷贝重叠的区域不会出现问题,内容均可以正确地被拷贝。 第二种情况下,问题出现在右边的两个字节,这两个字节的原来的内容首先就被覆盖了,而且没有保存。所以接下来拷贝的时候,拷贝的是已经被覆盖的内容,显然这是有问题的。 举个代码例子,下面的代码片段就会导致内存重叠:...

  4TgGxjjE1CwY   2023年11月02日   27   0   0 C++

Spdlog是一个快速、异步的C日志库,被广泛应用于C项目中。在这篇文章中,我们将探讨Spdlog日志库的实现原理。 Spdlog的结构 Spdlog由五个主要组件构成:Loggers、Sinks、Formatters、AsyncLogger和Registry。每个组件都扮演着不同的角色,共同协作记录并输出日志消息。 Loggers:是Spdlog最基本的组件,负责记录日志消息。在Spdlog中,一个Logger对象代表着一个日志记录器,应用程序可以使用Logger对象记录不同级别的日志消息。 Sinks:决定了日志消息的输出位置。在Spdlog中,一个Sink对象代表着一个输出位置,例如控...

  4TgGxjjE1CwY   2023年11月02日   117   0   0 C++

什么是Spdlog日志库 Spdlog是一个C的日志库,它具有高效、易用、跨平台等特点。它可以写入到控制台、文件等输出目标,支持多种日志级别、多线程安全等功能,非常适合在C项目中使用。 Spdlog日志库的历史和背景 Spdlog日志库最初由GabiMelman开发,它最初是为了解决C中的日志记录问题而创建的。在很长一段时间里,C中缺乏一个高效、易用、跨平台的日志库,因此GabiMelman决定创建自己的日志库。他将其命名为Spdlog,表示SuperfastCLoggingLibrary。 Spdlog于2015年首次发布,现在已成为C应用程序中最受欢迎的日志库之一。它在GitHub上获得了...

  4TgGxjjE1CwY   2023年11月02日   73   0   0 C++

Spdlog是一个快速且可扩展的C日志库,它支持多线程和异步日志记录。在本文中,我们将分析Spdlog日志库的核心代码,探究其实现原理和代码结构。 Spdlog的基本架构 上一篇文章介绍了spdlog的五个主要组件,其中最重要是Logger、Sink和Formatter其中,Logger负责日志的记录和管理,Sink负责将日志输出到不同的目标(比如控制台、文件、网络等),Formatter负责将日志格式化为字符串。我们会在下面详细的介绍下它们。 Logger Logger是Spdlog日志库的核心组件,它负责记录和管理日志。Logger的定义如下: classlogger{ public: e...

  4TgGxjjE1CwY   2023年11月02日   78   0   0 C++

本文档参考了Git提交规范,旨在规范使用SVN进行代码版本管理时的提交操作。 提交前的准备 1.检查代码 在提交代码前,请先进行必要的代码检查,确保代码的正确性、可读性和可维护性。可以使用代码质量管理工具进行自动化检查,也可以手动检查。 2.编写提交信息 在提交代码时,需要编写提交信息来描述本次提交的内容。提交信息应包括以下内容: 本次提交的目的或原因 本次提交的变更内容 其他有关本次提交的说明信息 提交信息应遵循以下格式: <type>(<scope>):<subject> <body> <footer> 其中,<...

  4TgGxjjE1CwY   2023年11月02日   67   0   0 .NET

在团队协作中,Git提交规范对于代码的可维护性和版本管理非常重要。下面总结了一些常见的提交规范: 提交信息格式 每个Git提交信息都应该包含一个清晰简洁的标题和一个更详细的描述。推荐的提交信息格式如下: <type>(<scope>):<subject> <BLANKLINE> <body> <BLANKLINE> <footer> 其中,<type>代表提交类型,<scope>代表影响范围,<subject>是提交信息的简短描述,<body>是详细描述,&l...

  4TgGxjjE1CwY   2023年11月01日   76   0   0 项目与团队管理

很多时候,在linux我们源码编译库代码时候会自定义安装路径,这使得man查询的时候无法找到库文档,默认的man搜索路径可以使用下面命令查看: $man-w /usr/local/share/man:/usr/share/man 我们可以通过修改man的命令搜索配置文件/etc/man_db.conf来添加自定义路径的man文档。使用vim打开man_db.conf(注意需要root权限),找到MANDATORY_MANPATH位置,在其下方添加搜索路径。例如,如果我们安装了zeromq库,并将其安装到自定义位置/usr/local/zeromq/,那么zeromqman文档的路径就是/us...

  4TgGxjjE1CwY   2023年11月01日   73   0   0 Linux
关注 更多

空空如也 ~ ~

粉丝 更多

空空如也 ~ ~