MENU

标签 摸爬滚打C++之路 下的文章

负载均衡之加权轮询调度算法

前言

WRR(Weighted Round Robin)基于权重轮询调度算法。
过去只是在nginx上直接使用,由于最近在自行开发一个webserver,涉及到一个负载均衡功能,因此自行实现基于权重轮询调度算法。

分析

假设有三台服务器(IP 端口 权重)分别为如下:

  • 服务器A:10.1.1.92:8081 weight:5
  • 服务器B:10.1.1.93:8081 weight: 1
  • 服务器C:10.1.1.94:8081 weight: 1

阅读全文

linux进程通信eventfd

前言

在muduo网络应用框架中EventLoop类中学习到关于eventfd,所以系统性查找资料学习有关eventfd。

知识点

eventfd通过一个进程间共享的64位计数器来实现进程间的通信,基于事件驱动实现的轻量级进程间通信的系统调用。

int eventfd(unsigned int initval, int flags);
# 返回一个新的文件描述符,该描述符可以用于引用eventfd对象。

阅读全文

C++ explicit 关键字

知识点

explicit用来声明类构造函数的显示调用,当然这个作用是针对单参数构造函数

示例

#include <iostream>

class ExplicitTest {
public:
    // 无参构造函数不能隐式调用
    ExplicitTest() {
        std::cout << "这是无参构造函数" << std::endl;
    }

    explicit ExplicitTest(int num) {
        std::cout << "这是int参数构造函数" << num << std::endl;
    }

    explicit ExplicitTest(char *str) {
        std::cout << "这是char参数构造函数" << str << std::endl;
    }

    // 多参数构造函数不能隐式调用
    ExplicitTest(int num, char *str) {
        std::cout << "这是多参数构造函数" << num << str << std::endl;
    }
};

int main(int argc, char *argv[]) {

    ExplicitTest explicitTest1(5);
//    ExplicitTest explicitTest2 = 5;  有explicit关键字无法隐式调用
    ExplicitTest explicitTest3("hello world");
//    ExplicitTest explicitTest4 = "hello world"; 有explicit关键字无法隐式调用

    return 0;
}

C++11新特性之智能指针

前言

C/C++不像Java那样JVM有垃圾回收机制,需要使用者mallocnew分配内存,freedelete释放内存。一旦忘记释放内存,则会出现内存泄露问题。
在C++11标准中新增unique_ptrshared_ptrweak_ptr这三个智能指针来自动回收堆分配的对象。C++98中的auto_ptr也置为deprecated。下面总结下这四个指针的区别。

阅读全文

基于Linux EPOLL多路复用的C++轻量级WebServer

功能

  • 可作为静态webserver(常规的html、图片、视频等)
  • 支持GET、POST(交由cgi处理)请求
  • 多站点支持
  • 支持fastcgi(目前已支持php-fpm)
  • 支持反向代理
  • 支持session、cookie

todo:

  • 负载均衡(开发中,完善支持随机模式、hash模式、权重模式三种负载均衡策略)
  • 日志完善
  • 实现类似nginx中rewrite模块

项目地址 欢迎PR、Issue、Star。

阅读全文