自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(38)
  • 资源 (3)
  • 收藏
  • 关注

原创 C++内存模型介绍

C++内存模型介绍。

2022-10-18 23:30:08 440 1

原创 redis-cli写入超长转义字符串问题

redis-cli交互模式下,最多写入4095个有效字符,本文说明了两个对其进行扩展的方案。

2022-08-12 08:33:32 1564

原创 基于redis集群的分布式锁redlock

单集群的redis分布式锁存在一些问题,本文是redis作者基于多个redis实例提出的redlock算法。

2022-08-09 08:47:27 925

原创 redis内存碎片整理

redis在大量申请、释放资源后,会产生内存碎片,大量的内存碎片会影响新内存的申请,本文分析redis自带的内存碎片整理代码逻辑。

2022-07-31 23:36:07 1939

原创 rediscli二进制数据可视化

一、背景在做高并发的一些项目中,为了快速响应 大量使用了 redis 做缓存数据。因为 redis 使用内存存储数据,导致成本较高,因此我们项目中大量将 protobuf 的二进制数据存储到 redis 中。这种做法降低了存储成本,但也遇到了一些问题:数据的可读性差,使用 redis-cli 读取数据时,不如 json 等格式化数据清晰;造数据麻烦,如果使用 json 等格式化数据,直接写好 json 后使用 redis-cli 写入即可;使用 protobuf 后造数据需要写代码来完成。二、效

2022-05-09 17:16:44 2004

原创 redis+lua调试日志打印

1、使用redis日志redis内嵌的lua引擎提供了日志打印,需要在 redis.conf中配置:loglevel = logfile = 在redis的lua脚本中,只需要打印相关日志即可:redis.log(redis.LOG_WARNING, "foo bar")redis.log函数接收两个参数,第一个是日志级别(LOG_DEBUG,LOG_VERBOSE,LOG_NOTICEandLOG_WARNING),第二个是日志内容。缺点:需要对redis进行...

2021-08-11 20:11:06 4006

原创 C++ defer函数实现

类似go语言里的defer实现,有几个注意点:使用析构函数实现,后面的defer会优先调用; defer是引用传递,defer内修改值,也会影响外面。#include <stdio.h>#include <stdlib.h>#include <iostream>#include <functional>using namespace std;class DeferHelper{public: DeferHelper(std::

2021-07-26 12:58:14 1071

原创 nginx upstream中长连接池的维护

nginx中的长连接分为两种:下游客户端和nginx的长连接 nginx反向代理后和上游服务器之间的长连接upstream中的长连接池当nginx反向代理请求上游服务器时,第一次时会建立TCP连接,等待请求响应完毕之后,如果upstream中配置了keepalive指令,对应upstream中的server就会把连接暂存;等到下次继续请求upstream中的server时,首...

2020-04-12 21:33:52 1901

原创 nginx升级版本导致的CLOSE_WAIT异常

背景:在 nginx上添加 http模块(C++),添加的 http模块调用配置文件中配置好的动态库程序(C++),动态库程序实现业务代码。最近需要用到 nginx比较高版本的镜像流量的功能,但是我们线上 nginx版本比较低,所以需要进行 nginx版本升级。问题:升级 nginx版本后(1.8 -> 1.16),上游请求 nginx服务会随机超时,在 nginx服务机器...

2019-08-19 22:01:51 3842

原创 nginx时间更新机制(ngx_timer_resolution)

nginx worker进程就是在处理网络事件、定时器事件和信号,核心是处理网络事件和定时器事件。下面看一下 worker进程是如何精确处理这些核心事件的。1、worker进程启动在 worker进程处理函数中,首先进行 worker进程运行相关的配置初始化设置操作,然后进入无限循环,处理 worker进程关注的信号和定时器事件以及核心的网络事件。下面是相关代码:static ...

2019-08-11 16:39:04 2167

原创 nginx worker启动初始化分析

1、master进程初始化:nginx是 master-worker多进程模型,程序启动时首先启动 master进程,由 master进程根据配置启动 worker进程,在 master函数中处理代码如下:void ngx_master_process_cycle(ngx_cycle_t *cycle) { // .. ccf = (ngx_core_conf_t *) ...

2019-08-09 23:24:52 464

原创 nginx启动分析-ngx_master_process_cycle

nginx在开启master-worker工作模式时,会调用ngx_master_process_cycle函数进行master、worker进程的相关初始化操作,然后会进入一个无限循环处理nginx感兴趣的相关信号,主要是用来管理worker进程相关。下面看一下函数的初始化相关代码,代码主要设置nginx需要监听的信号,设置master进程名称,根据配置初始化指定数量的worker进程...

2019-08-04 22:09:02 650

原创 nginx反向代理配置 + POST请求携带content导致的异常

在使用 nginx反向代理功能时,因为我们只对客户端请求中的请求行感兴趣,对请求头和包体数据不感兴趣,所以忽略了请求头和请求包体数据(proxy_pass_request_headers proxy_pass_request_body全部off)。但是在客户端请求是 POST并且携带 content内容时,nginx反向代理发给后端请求数据中就会携带 Content-Length字段,可能会导致异...

2019-06-24 19:11:37 8721

原创 dos2unix批量转换脚本

        这个脚本是解决使用 Windows结尾格式的文本文件在 Linux下面使用的时候会出现莫名其妙错误的问题,一般我们使用 Linux下面的 dos2unix命令转换文件的格式即可,但是如果我们需要批量转换的话,这就有点麻烦了,可以使用脚本来进行处理。 dos2unix.sh:#!/bin/shforeachDir () { echo "foreachDir S...

2018-08-04 11:07:07 861

原创 Rabbitmq C++客户端(基于rabbitmq-c)

    最近项目使用了rabbitmq消息队列,需要基于rabbitmq-c(https://github.com/alanxz/rabbitmq-c)进行一层封装,然后根据官方自带示例以及网上代码整理了一下。    发送者需要声明exchange,并指定routekey进行数据发送;消费者需要声明一个Queue并绑定exchange和routekey,进行数据接收。RabbitmqClient头...

2018-07-04 17:31:30 25022 23

原创 Mysql错误:check the manual that corresponds to your MySQL server version for the right syntax

数据库表字段与SQL关键字冲突导致的错误错误信息为:check the manual that corresponds to your MySQL server version for the right syntax这是之前写的一条 Mysql语句报的 SQL错误,但是仔细检查 SQL语句没有发现有什么异常问题。后来百度查到,我的数据库表中有一个字段名为 desc,这

2017-12-27 15:08:31 147403 12

原创 Linux多网卡拉同一组播导致数据异常

最近在做项目的时候遇到了这么一个问题,就是在使用 多网卡的 Linux主机拉组播数据的时候,如果两块网卡在一个局域网中,并且拉同一个组播流,那么就会出现问题,问题的现象是 每个网卡都可以收到组播流,但是收到的组播流数据是双倍的。最终问了曾经遇到过这个问题的同事后,发现只是在创建 socket的地方绑定一个网卡就可以了,需要使用 SO_BINDTODEVICE来绑定网卡,需要的参

2017-08-02 18:49:02 1210

原创 Linux下安装boa服务器遇到的问题

最新在CentOS7机器上安装boa服务器的时候,遇到了不少问题,在这里记录一下。1.从官网下载最新 boa源码包,网址:http://www.boa.org/;2.解压,进入 src目录,给 configure权限,执行 ./configure;3.make编译,会报错,util.c: 在函数‘get_commonlog_time’中:util.c

2017-08-02 17:40:36 2894 3

原创 live555Server读取文件修改为socket接收数据遇到的问题

最近在修改 live555Server端的代码,基本需求是这样的,live555Server有从文件读取音视频数据作为 Server的 Demo。我们需要改为 从网络中接收音视频数据作为 Server的数据输入。最终是一个程序从网络中接收音视频数据,然后建立 Unix socket套接字服务,等待有客户端连接 live555Server的时候,live555Server首先创建套接字连接我们程序刚

2017-07-21 17:08:58 1003

原创 Linux wget命令

最近在写 shell脚本的时候用到了 Linux下面的 wget命令,是通过网络从远程服务器下载文件到本地。我只是简单的用了一下 wget命令,下载文件到本地的指定目录中,wget -P 本地路径 下载url于是在抓包看了一下通信流程,就是本机先与服务器三次握手建立连接,然后发送一个 http的 GET请求,然后从服务器不断的获取数据,完毕之后关闭这个 tcp连接并保存,使

2017-04-18 17:30:38 574

原创 Wireshark将udp包作为rtp包解析

最近在使用 Wireshark的时候,由于想要分析一下 rtp数据包的 Seq值,于是抓取了一个数据包(rtsp协议),在分析数据包的过程中发现,如果 Wireshark抓到了 rtsp的建立连接的协议,可以成功分析出 之后的udp数据为 rtp数据,并提取相关的值,如下图所示:但是如果 Wireshark没有抓取到 最开始建立连接时的交互信息,那么之后抓取的数据包只会当做普通的 ud

2017-04-14 19:36:10 11552 4

原创 iocnv Linux字符编码转换函数 坑

最近写项目的时候,需要进行编码格式的转换(GB2312转换为utf-8),于是使用到了 iconv这个函数,是一个 Linux下的转码库函数。这个函数的参数列表是这样的:size_t iconv(iconv_t cd, char **inbuf, size_t *inbytesleft, char **outbuf, size_t *outbytesleft); 第二个和第四个

2017-04-08 12:22:12 715

原创 git与github简单用法

git与github关联的简单用法。

2017-02-25 22:50:47 1344

原创 使用GB28181从海康NVR设备上获取实时视频

最近在调研使用GB28181协议获取海康NVR设备上的实时视音频数据,

2017-01-21 12:24:23 55493 16

原创 C++设计模式 代理模式

最近在看《大话设计模式》这本书,看到了代理模式这一章,正好有时间,简单的写一下自己的理解。代理模式就是其实就是对 真实的实体做了一层封装,客户端调用的时候 直接访问代理类,代理类再根据实际情况去操作真实的实体。在操作实体之前,代理类可以做一些判定或者其他的操作,这就是代理类存在的意义。一般代理类中都会保存一个 实体类的对象的引用或者指针。代理类和实体类具有相同的接口,一般情况下他们继承自一

2016-12-16 21:45:22 584

原创 音视频CC计数检查

在网络中收取视频数据的时候,可以通过检查 CC来判断网络中是否存在丢包问题,CC字段是在 TS头中的一个计数值,正常情况下它是从0到15的连续值(到达16后变为0)。编码思路:首先记录第一次的 CC值,然后再收到数据包的时候和上次保存的 CC值进行对比,如果差1说明网络中没有丢包。有以下几种情况 CC计数是可以不连续的:1.调整字段的值为 00或者 10的时候,说明这个数据

2016-12-06 19:47:38 582

原创 视音频TS包头信息

最近在做 ES数据封包,于是学习了一下 音视频的 ES封包的基础知识。一般情况下,视频的 一帧数据是很大的,一般由 几千到几万字节,但是 TS包的长度是固定 188字节,所以会有很多的 188字节数据包来组成一帧画面。在每帧开头的第一个 TS包头会 start_indicator标志位(在头的第二个字节上的一位),解码器用这个信息来判断是否在 网络中收取了完整的一帧视频数据。

2016-11-20 19:17:36 816

原创 CentOS7.1 安装 ffmepg

最近不是很忙,就搞搞之前一直没有搞定的 ffmpeg在 centos下的安装,真的是不容易啊。安装 ffmpeg网址参考:https://trac.ffmpeg.org/wiki/CompilationGuide/Centos    最开始安装了一次成功了,但是 ffmpeg库生成的是 静态库(完全按照网址中的教程去做),导致 编译的时候 需要把程序所依赖的所有库文

2016-10-12 23:40:53 4644

原创 Linux tcpdump抓组播包

以前只会使用 Windows下的 WireShare抓本机的网口的数据包,最近在做Linux的项目的时候,才发现 抓Linux的包也很容易, 一条命令即可,然后重命名之后移动到 Windows上 进行包的过滤即可,如果你要想抓组播流,需要在 Linux系统上启动一个 拉指定组播流的程序,否则抓取不到组播流。tcpdump -i eth0 -w ts.pcapng-i 指定网卡  -w 指定

2016-09-10 11:13:04 8390

原创 应用程序的并行配置不正确 sxstrace.exe

最近在用 VS写一个 小Demo的时候,在自己的电脑的上运行的好好的,但是拿到 另一台电脑(Wes8操作系统)就运行不起来,报: 应用程序的并行配置不正确 sxstrace.exe的错误,在网上找了方法,一般就是 安装运行库,修改系统配置等等,但是操作了之后还是不能运行。最后将 程序编译成 release版本就可以运行了。。。原因还不是很清楚。。。

2016-08-28 09:50:29 17493

原创 aplay:control open (0): Invalid argument

Linux下 Alsa编程遇到了一些错误,第一个就是在给 Linux安装 编程库时出现的 使用命令查看声卡 arecord -l,出现的 aplay: device_list:277: control open (0): Invalid argument错误,在网上查找了方法之后,发现能解决这个问题的就是:1.使用 命令aplay --version查看当前 alsa版本号,我的是 1.0.2

2016-08-28 09:35:17 1581

转载 C++对xml文档操作 CMarkUp

最近正在研究C++下的XML分析工具CMarkup。初次和XML相遇是基于C#对XML的操作。C#的XmlDocument和XmlNode给我印象之深,让我至今都无法忘怀。现在想在C++下发掘XML的强大,结果却发现建房子你除了需要基本的建设材料外,还需要些而外的工具。不像C#那样,已经打成包供你直接使用了。好在有知道CMarkup这个小型XML的分析器,可以为我所用。俗话说:磨刀不误砍柴工。我现

2016-01-24 13:45:19 601

原创 DirectX的error LNK2019: 无法解析的外部符号 _Direct3DCreate9@4,该符号在函数 "long __cdecl InitD3D(struct HWND__ *)"

在VS下弄了半天这个,总是出错误,解决方法就是 首先把安装的DirectX的 头文件和 库包含进来,要包含 win32 x86的,最后在 项目->配置属性->链接器->输入->附加依赖项 中加入 d3d9.lib,就可以正常编译了。

2016-01-22 13:44:58 3590

转载 解决bash: mysql: command not found 的方法

[root@Llover www]# mysqld -uroot-bash: mysqld: command not found原因:这是由于系统默认会查找/usr/bin下的命令,如果这个命令不在这个目录下,当然会找不到命令,我们需要做的就是映射一个链接到/usr/bin目录下,相当于建立一个链接文件。首先得知道mysql命令完整路径,比如我的Linux的mysql的路径

2015-07-16 22:32:13 1700

原创 Windows下 Qt断点调试,查看变量

在Qt下 设置好断点,开始调试(F5) ,在调试哪一行上 右击 选择 Locals and Expressions,就会弹出变量什么的,然后想查看那个变量当前值 选中变量 右击选择 添加表达式求值器 就可以在里面看到了,我这里是右上角

2015-04-26 15:59:20 10574 1

原创 Qt 的缺少 .dll 文件 找不到uic命令

Centos6.6:今天用 Qt 的时候是出现了各种问题,前是 uic 命令找不到, find / -name uic ,找到 uic 之后,找到里面的 uic-qt4,然后cd /usr/bin/ ,ln -s uic-qt4 uic,这样就可以了,就可以使用 uic 命令 将 .ui 文件转换为 .h 文件了Windows7:  运行程序的时候 缺少 **.dll 文件,因为我的 Qt

2015-04-25 22:53:42 1757

原创 centos 6.6 qmake 找不到命令

今天用 qt 的时候 出现了 qmake:command not found,于是就去网上找了找,一般情况下都是安装了的,如果没有安装,先安装Qt,yum install qt4 qt4-devel qt4-x11,这里可以将 qmake的路径加入环境变量中,找到 qmake的路径,然后 vi /home/username/.bashrc ,export PATH=$PATH:(qmake

2015-04-22 16:57:49 4083

原创 俄罗斯方块的 C++实现

最近想写一个俄罗斯方块,正好电脑里面有个以前下的代码,于是就看了看思路,然后自己加了一些东西,要是忘了就不好了先做7个不同类型的方块,分别为 长条形、方形、L形、反L形、Z形、反Z形、土字形。用一个二维数组保存每个形状,每个形状使用4个点,每个点代表每种形状的一个小方格,比如:{ 0, 0, 0, 1, 0, 2, 0, 3, FOREGROUND_RED | FOREGROUND_I

2015-04-21 10:49:22 26956 8

rabbimqclient(C++)

rabbitmq的C++客户端(Linux下代码),基于rabbitmq-c库进行了一层封装。

2018-07-04

GB28181调研文档

GB28181与海康NVR通信调研文档。

2017-01-21

C++实现俄罗斯方块 实例源码下载

使用C++写的俄罗斯方块,压缩文件中有源代码和VS2013建的项目。

2016-12-26

空空如也

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

TA关注的人

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