自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(86)
  • 收藏
  • 关注

原创 在Linux系统安装python3.7以及pip3

最近在编译mediasoup-demo-v3的时候,要用到python3.7以上的版本,但是本地yum用到了phthon2.7,强行升级会导致yum的不可用,本文记录在不影响python2的情况下,升级使用python3的方法。我这里安装的是3.7.4版本,如果需要其他的版本,找到对应的下载链接即可。

2024-02-29 17:44:55 567

原创 node: /lib64/libm.so.6: version `GLIBC_2.27‘ not found问题解决方案

cent os7服务器使用nvm安装的node之后,只要使用npm或者node,均会出现以下问题。

2024-02-28 14:11:58 2933 2

原创 微服务的幂等性

微服务架构设计的中心思想是将服务进行拆分,但是在这个过程中,如果被依赖的服务发生奔溃,就会引起一系列问题。为了解决这个问题,就会引入重试的机制,重试又会引入幂等性的问题,下面我们就分析这个过程,然后探讨一下常见的解决方案。

2024-02-04 15:03:21 1503

原创 RocketMQ消息队列(二)—— Go语言操作RocketMQ

上篇文章《》记录了RocketMQ的一些基本的概念,本文主要写几个go语言操作RocketMQ的示例代码。

2024-02-02 15:43:09 854

原创 RocketMQ消息队列(一)—— 基本概念和消息类型

事务消息:云消息队列 RocketMQ 版提供类似XA或Open XA的分布式事务功能,通过云消息队列 RocketMQ 版事务消息能达到分布式事务的最终一致。半事务消息:暂不能投递的消息,生产者已经成功地将消息发送到了云消息队列 RocketMQ 版服务端,但是云消息队列 RocketMQ 版服务端未收到生产者对该消息的二次确认,此时该消息被标记成“暂不能投递”状态,处于该种状态下的消息即半事务消息。

2024-02-02 14:43:54 1052

原创 分布式事务(六)—— 最大努力通知的解决方案

系列目录:《分布式事务(一)—— 事务的基本概念》《分布式事务(二)—— CAP和Base理论》《分布式事务(三)—— 两阶段提交解决方案(2PC)》《分布式事务(四)——TCC补偿模式解决方案》《分布式事务(五)——基于本地消息和可靠消息的解决方案》  最大努力通知也是一种解决分布式事务的方案,其主要是用于解决执行结果的回调通知问题,尤其是执行结果是一个外部调用,我们没法干预其执行的时候,执行结果如何通知给我们的场景。比如我们系统中调用支付宝的支付接口,支付是否成功我们肯定是要关注的,支付宝如何将执行结果

2024-02-01 19:26:21 911

原创 分布式事务(五)——基于本地消息和可靠消息的解决方案

系列目录:《分布式事务(一)—— 事务的基本概念》《分布式事务(二)—— CAP和Base理论》《分布式事务(三)—— 两阶段提交解决方案(2PC)》《分布式事务(四)——TCC补偿模式解决方案》  基于本地消息表实现数据一致性的方案最初是由eBay提出的,此方案的核心是通过本地事务保证数据业务操作和消息的一致性,然后通过定势任务将消息发送到消息中间件,待确认消息发送给消费方成功再将定时任务的消息删除。这种方式的主要逻辑就是通过定势任务一致发送消息,直到成功为止。其优缺点也就一目了然了,最大的问题也就是在定

2024-02-01 19:03:39 924

原创 分布式事务(四)——TCC补偿模式解决方案

首先需要选择某种TCC分布式事务框架,各个服务力就会有这个TCC分布式事务框架在运行然后你原本的一个接口,需要改造成3个逻辑: Try-Confirm-Cancel先是服务调用链路依次执行Try逻辑如果都正常的话,TCC分布式事务框架推进执行Confirm逻辑,完成整个事务如果某个服务的Try逻辑有问题,TCC分布式事务框架感知到之后会推进执行各个服务的Cancel逻辑,插销之前执行的各个操作先来Try一下,不要把业务逻辑完成,先试试,看各个服务能不能正常运转,能不能先冻结需要的资源。

2024-02-01 17:36:37 842

原创 分布式事务(三)—— 两阶段提交解决方案(2PC)

系列目录:《分布式事务(一)—— 事务的基本概念》《分布式事务(二)—— CAP和Base理论》  两阶段提交方案在目前的分布式事务中只是一种方案,因为其比较复杂,且问题比较多,实际使用的比较少,但是我们也可以进行了解。  2PC是一个非常典型的中心化原子提交协议:这里所说的中心化指协议中有两类节点,一个是中心化的协调节点(Coordinator)和N个参与者节点(Partcipant).两个阶段指的是:  两阶段提交的设计思路就是在N个调用的节点的上面加上一个协调的节点。在发生事务操作的时候,先让协调节点

2024-02-01 16:58:24 930

原创 分布式事务(二)—— CAP和Base理论

总体来说,Base理论面向的是大型高可用可扩展的系统,和传统的事物ACID特性是相反的,它完全不同于ACID的强一致模型,而是牺牲强一致来获得可用性,并允许数据在一段时间内不一致,但最终达到一致状态。同时,在实际的分布式场景中,不同业务单元和组建对数据一致性的要求不同,因此在具体的分布式系统架构设计的过程中ACID特性和Base理论往往又会结合在一起。软状态指允许系统中的数据存在中间状态,并认为该中间状态的存在不会影响系统的整体可用性,即允许系统在不同节点数据副本之间进行数据同步的时候可以存在延时。

2024-02-01 16:08:09 1034

原创 分布式事务(一)—— 事务的基本概念

一组sql语句操作单元,组内所有的sql语句完成一个完成的业务,如果整组成功,意味着全部sql都执行成功,如果其中任何一个失败,意味着整个操作都失败。失败,意味着整个过程都没有意义,应该让数据库回到操作前的初始状态,这种特性,就叫做事务。

2024-02-01 15:26:14 428

原创 Mediasoup Demo-v3笔记(七)——Mediasoup 下的业务操作

在实际的代码中,在main.cpp 中调用mediasoup_worker_run函数在mediasoup_worker_run函数实现中进行了各个模块的初始化。

2024-01-26 10:40:54 443

原创 Mediasoup Demo-v3笔记(六)——Mediasoup 进程间的通信

我们知道,在mediasoup库中,有js和c++的两个进程,在顶层的mediasoup-demo中会创建多个Worker来创建对个进程,所以就会出现一个js进程对应多个c++子进程的情况,那这些进程中间是如何通信的呢?

2024-01-25 15:33:22 518

原创 Mediasoup Demo-v3笔记(五)——Mediasoup 的启动

Mediasoup是由两部分组成的,一部分是js的控制模块,一部分是c++的传输模块,在这里我们用mediasoup demo的代码开始,分析整个进程的启动过程。

2024-01-25 14:33:45 515

原创 Mediasoup Demo-v3笔记(四)——Mediasoup C++库类关系

Mediasoup C++核心类图Mediasoup 完整类图

2024-01-25 11:07:28 400

原创 Mediasoup Demo-v3笔记(三)——Mediasoup库介绍

Mediasoup基本概念Worker : 每一个worker就是一个进程(节点),进程和进程之间可以通信Router:每一个Router就是一个房间的概念Producer:每一个发出声音和视频的流都是一个ProducerConsumer:每一个消费音频和视频的流都是一个ConsumerTransport:Producer和Consumer通过Transport通信,每个Transport中有多个Producer和ConsumerMediasoup结构图Mediasoup的特性M

2024-01-25 10:41:20 424

原创 Mediasoup Demo-v3笔记(二)——server.js和room.js分析

主要运行逻辑。

2024-01-25 10:06:04 424

原创 Mediasoup Demo-v3笔记(一)——框架和Nodejs的基本语法

个人总结,欢迎转载、评论、批评指正。

2024-01-24 19:55:08 446

转载 WebSocket(二)-WebSocket、Socket、TCP、HTTP区别

WebSocket 是为了满足基于 Web 的日益增长的实时通信需求而产生的。在传统的 Web 中,要实现实时通信,通用的方式是采用 HTTP 协议不断发送请求。但这种方式即浪费带宽(HTTP HEAD 是比较大的),又消耗服务器 CPU 占用(没有信息也要接受请求)。(下图来自而是用 WebSocket 技术,则会大幅降低上面提到的消耗:(下图来自WebSocket(2)–为什么引入WebSocket协议。那么,WebSocket 到底与 HTTP 协议到底是一个什么样的关系呢?

2024-01-19 18:08:31 79

原创 Nginx 基础使用

进入Nginx的主目录我们可以看到这些文件夹其中这几个文件夹在刚安装后是没有的,主要用来存放运行过程中的临时文件。

2024-01-18 18:50:45 1822

原创 尚硅谷Nginx高级配置笔记

页面首次打开,直接读取缓存数据,刷新,会向服务器发起请求。

2024-01-18 15:40:47 1420

原创 C++其他语法总结

throw异常后,会在当前函数中查找匹配的catch,找不到就终止当前函数代码,去上一层函数中查找。shared_ptr的设计理念:多个shared_ptr可以指向同一个对象,当最后一个shared_prt在作用域范围内结束时,对象才会被释放。dynamic_cast:一般用于多态类型的转换,有运行时安全检测,会将不安全的转换设置为null。shared_ptr的循环引用:智能指针指向的对象不会被销毁,导致内存泄漏。c++中的异常可以被try…可以通过一个已存在的智能指针初始化一个新的智能指针。

2024-01-09 19:44:59 974

原创 Linux上搭建YApi

YApi是http接口管理和测试的重要工具,其作用相当于原来用的postman,但是比postman有更多的功能,本篇文章主要介绍如何在linux环境中快速的安装(利用yum命令安装)和部署YApi。

2024-01-05 12:33:17 764

原创 C++面向对象语法总结(三)

必须初始化,而且必须在类的外面初始化,初始化时不能带static,如果累的声明和实现分离,需要在实现(cpp文件)中初始化。对象创建后,需要做一些额外的操作时(比如内存操作、函数调用),编译器一般都会为其自动生成无参的构造函数。菱形继承指的是两个类继承了一个超类,然后有一个子类又多继承了这两个类,其继承关系图类似于菱形。c++的编译器在某些特定的情况下,会给类自动生成无参的构造函数,比如。静态成员:被static修饰的成员变量或函数。虚基类第一个成员变量与本类起始的偏移量。静态成员经典应用——单例模式。

2024-01-03 20:59:10 847

原创 C++面向对象语法总结(二)

默认情况下,编译器智慧根据指针类型调用对应的函数,不存在多态,如果需要有多态特性,父类的函数需要声明为虚函数(virtual修饰的函数)所有的对象(不管是全局区,栈、堆)共用一份虚表,因为虚表中存的是函数地址,函数是代码,在程序运行中只有一份。虚函数的实现原理是虚表,这个虚表里面存储着最终需要调用的虚函数的地址,这个虚表也叫做虚函数表。父类构造函数 ===》子类构造函数 ===》 子类析构函数 ===》父类析构函数。虚表的地址在对象内存的最前面,在虚表中已经确定了该对象要使用的虚函数的地址。

2024-01-03 19:40:37 813

原创 C++面向对象语法总结(一)

一般情况下,对象中的成员变量是在内存中连续存放的,对象的名称指向存放成员变量的首地址的位置。封装指的是将成员变量私有化,提供公共的getter和setter给外界去访问成员变量。注意:用malloc分配的对象free的时候不会调用析构函数。注意:通过malloc分配的对象不会调用构造函数。个人总结,欢迎转载、评论、批评指正。

2024-01-03 18:03:49 867

原创 gin框架使用系列之七——优雅的停止程序

优雅的停止程序,指的是在停止程序的过程中有一种机制,可以让程序去做一些清理工作。这个功能在当今的微服务架构中较为常见,比如程序启动的时候会给注册中心注册服务信息,比如ip和端口等,如果在服务停止的时候,可以告诉注册中心服务停止的信息,这样整个程序就会更加的健壮。go语言因为有协程的存在,让这种停止很容易实现,具体的思路就是服务启动的时候用协程来启动,在检测到服务停止的信号以后,服务进行其他的操作。

2023-12-27 17:47:35 395

原创 gin框架使用系列之六——自定义中间件

gin中将很多需要拓展的功能都归纳到中间件中,比如说上篇我们用到的国际化的转换器,就是一个中间件。在大多数情况下,中间件可以理解为一个拦截器,gin中将中间件组成一个链,在调用的过程中依次执行中间件,就可以实现拦截的目的。gin中的中间件实现其实很简单,其实就是一个func(*Context)的函数类型,并在使用的时候在router.use()中注入即可。尤其是因为有routeGroup功能,gin还可以支持给不同的group添加不同的中间件。

2023-12-27 17:37:58 1147

原创 gin框架使用系列之五——表单校验

在第三篇中,我们介绍了如何将form表单和json等数据转成结构体对象中的方法,当时在绑定的结构体中,其tag中就有“binding”的信息,这就是gin中表单验证的基础。为了详细了解表单验证,我们进一步了解以下表单绑定的知识。上面示例中我们可以看到表单验证信息的报错中,显示的不是很详细,而且暴露了go后台代码的数据,我们可以为其添加国际化信息。个人总结,欢迎转载、评论、批评指正。下面是增加翻译器的方法。

2023-12-27 17:09:42 1158

原创 gin框架使用系列之四——json和protobuf的渲染

上篇我们介绍了如何获取数据,本篇我们介绍一下如何返回固定格式的数据。

2023-12-27 15:49:11 1079

原创 gin框架使用系列之三——获取表单数据

get请求的参数是直接加在url后面的,在gin中获取get请求的参数主要用Query()和DefaultQuery()两个方法,示例代码如下。其实方法很简单,只需要将上面步骤中绑定的表单数据的tag中的form字符串换成json,就可以接受json数据了。这时候重启项目,我们输入json数据,就能获取到json传入的值了。那在gin中如何获取json传入的数据呢?个人总结,欢迎转载、评论、批评指正。在请求中输入全部参数的结果。在浏览器中不输入参数的结果。输入全部参数的返回结果。

2023-12-27 15:04:10 1107 1

原创 gin框架使用系列之二——uri占位符和占位符变量的获取

/ 修改id为1的数据// 删除id为2的数据。

2023-12-27 14:22:54 845

原创 gin框架使用系列之一——快速启动和url分组

gin是go语言常用的web框架,在go语言的web体系和微服务体系中经常会出现,所以学习gin框架在go开发中非常有必要,由于博客的篇幅限制,我将学习到的gin常用的方法写成一个系列,以便在工作和学习中使用。

2023-12-27 13:57:06 442

原创 C++基础语法总结

一个变量的地址,是它所有字节地址中的最小值。

2023-12-22 12:10:16 924

原创 Windows修改MAC地址的方法(以windows11为例)

我们在日常的工作中,如果mac地址被限制,就需要修改mac地址,本文总结一下修改windows的mac地址的方法。

2023-12-03 18:40:31 11275 5

原创 CentOS7防火墙设置常用操作

【代码】CentOS7防火墙设置常用操作。

2023-11-30 10:22:13 369

原创 SocketIo的使用和基于SocketIO的聊天室

Socket.IO 是一个库,可以在客户端和服务器之间实现 低延迟, 双向 和 基于事件的 通信。

2023-11-21 17:30:03 492

原创 CentOS用nginx搭建文件下载服务器

Nginx 是开源、高性能、高可靠的 Web 和反向代理服务器,而且支持热部署,几乎可以做到 7 * 24 小时不间断运行,即使运行几个月也不需要重新启动。在工作中,我们经常会用到需要搭建文件服务器的情况,这里就以在linux下搭建文件服务器为例,解释编译nginx和搭建服务器的过程。

2023-11-21 11:18:14 3420 6

原创 CentOs7搭建基于pptp的VPN服务器

systemctl start firewalld.service(开启防火墙)systemctl stop firewalld.service(关闭防火墙)systemctl status firewalld(查看是否开启防火墙)

2023-11-04 14:05:07 4113

原创 Centos7下生成https自签名证书

使用带密码的私有秘钥文件时需要输入密码,这里直接输入:123456。这里需要输入信息,随便填写即可。这里让输入密码直接为空。

2023-10-30 17:56:11 1145

nginx高级配置笔记

nginx高级配置笔记

2024-01-18

空空如也

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

TA关注的人

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