nginx是多进程web服务器的优秀代表。

本文要用mongols-1.2.3实现一个比nginx更快的多进程的web服务器。

mongols是C++ 服务器基础设施库, 它的主要特性如下:

  • tcp 服务器
  • http 服务器
  • websocket 服务器
  • web 服务器
  • leveldb 服务器
  • lua 服务器
  • sqlite 服务器
  • medis 服务器

以上所有服务器均通过epoll机制实现,并且支持多线程化和多进程化。

mongols不依赖于任何事件库,其并发性能却强于著名的libevent、libev和libuv。

而且,它提供非常友好的开发接口,使得任何试图基于tcp、resp或http协议开发高性能网络服务器的开发者都能够轻易地完成工作。

下载:https://github.com/webcpp/mongols

先看压测比较:

再看代码:

 #include <unistd.h>
#include <sys/wait.h>
#include <sys/signal.h>
#include <mongols/util.hpp>
#include <mongols/web_server.hpp>
#include <iostream> static void signal_cb(int sig, siginfo_t *, void *);
static std::vector<pid_t> pids; int main(int, char**) {
// daemon(1, 0);
auto f = [](const mongols::request & req) {
if (req.method == "GET" && req.uri.find("..") == std::string::npos) {
return true;
}
return false;
};
int port = ;
const char* host = "127.0.0.1";
mongols::web_server
server(host, port, , , /*must be 0*/);
server.set_root_path("html");
server.set_mime_type_file("html/mime.conf");
server.set_list_directory(true);
server.set_enable_mmap(false); int child_process_len = std::thread::hardware_concurrency();
mongols::forker(child_process_len
, [&]() {
server.run(f);
}
, pids);
for (int i = ; i < child_process_len; ++i) {
mongols::process_bind_cpu(pids[i], i);
} const int sig_len = ;
int sigs[sig_len] = {SIGHUP, SIGTERM, SIGINT, SIGQUIT};
struct sigaction act;
memset(&act, , sizeof (struct sigaction));
sigemptyset(&act.sa_mask);
act.sa_sigaction = signal_cb; for (int i = ; i < sig_len; ++i) {
if (sigaction(sigs[i], &act, NULL) < ) {
perror("sigaction error");
return -;
}
} for (size_t i=;i<pids.size();++i) {
pid_t pid;
if ((pid = wait(NULL)) > ) { }
} } static void signal_cb(int sig, siginfo_t *, void * ) {
switch (sig) {
case SIGTERM:
case SIGHUP:
case SIGQUIT:
case SIGINT:
for (auto & i : pids) {
kill(i, SIGTERM);
}
break;
default:break;
}
}

结论:nginx并不是最快的web服务器。

比NGINX更快:nginx-1.15.5 vs mongols-1.2.3的更多相关文章

  1. 阿里云openssl升级,实现nginx主动推送,nginx主动推送能够有效减少不必要的报文传输,减少用户请求次数,以达到更快访问速度

    现有版本检查 [root@node3 ~]# openssl version               #这个版本是无法支持http2.0主动推送功能.需要升级为2019版本. OpenSSL 1. ...

  2. modSecurity和Naxsi哪个更适合Nginx搭建WAF

    nginx增加modsecurity模块 modsecurity原本是Apache上的一款开源waf,可以有效的增强web安全性,目前已经支持nginx和IIS,配合nginx的灵活和高效,可以打造成 ...

  3. Nginx为什么快到根本停不下来?

    Nginx 是一个免费的,开源的,高性能的 HTTP 服务器和反向代理,以及 IMAP / POP3 代理服务器. 图片来自 Pexels Nginx 以其高性能,稳定性,丰富的功能,简单的配置和低资 ...

  4. Nginx 笔记与总结(15)nginx 实现反向代理 ( nginx + apache 动静分离)

    在 nginx 中,proxy 用来实现反向代理,upstream 用来实现负载均衡. 例如有两台服务器,nginx 服务器作为代理服务器,执行 .html 文件,apache 服务器上执行 .php ...

  5. 【夯实Nginx基础】Nginx工作原理和优化、漏洞

    本文地址 原文地址 本文提纲: 1.  Nginx的模块与工作原理    2.  Nginx的进程模型    3 . NginxFastCGI运行原理        3.1 什么是 FastCGI   ...

  6. 让你的 Node.js 应用跑得更快的 10 个技巧(转)

    Node.js 受益于它的事件驱动和异步的特征,已经很快了.但是,在现代网络中只是快是不行的.如果你打算用 Node.js 开发你的下一个Web 应用的话,那么你就应该无所不用其极,让你的应用更快,异 ...

  7. 让互联网更快:新一代QUIC协议在腾讯的技术实践分享

    本文来自腾讯资深研发工程师罗成在InfoQ的技术分享. 1.前言 如果:你的 App,在不需要任何修改的情况下就能提升 15% 以上的访问速度,特别是弱网络的时候能够提升 20% 以上的访问速度. 如 ...

  8. Nginx教程(五) Nginx配置文件详解

    一. Nginx配置文件nginx.conf中文详解 #定义Nginx运行的用户和用户组 user www www; #nginx进程数,建议设置为等于CPU总核心数. worker_processe ...

  9. Quick UDP Internet Connections 让互联网更快的协议,QUIC在腾讯的实践及性能优化

    https://mp.weixin.qq.com/s/44ysXnVBUq_nJByMyX9n5A 让互联网更快:通往QUIC之路 原创: 史天 翻译 云技术实践 8月15日 QUIC(Quick U ...

随机推荐

  1. LINUX更改桌面的分辨率

    命令行 输入xrandr 输入xrandr命令后可以看到系统的一些分辨率的列表, 和当前系统屏幕的分辨率信息,可以通过命令的 相应参数对系统分辨率的一些设置操作. xrandr -s 0 全屏 xra ...

  2. JS this用法详解

        随着对js的深入学习和使用,你会发现它里面包含了很多令人困惑的机制,比如对象.闭包.原型链继承等等 1.this是啥? 简言之,this是JavaScript语言中定义的众多关键字之一,它的特 ...

  3. AGC016D - XOR Replace 置换/轮换

    目录 题目链接 题解 代码 题目链接 AGC016D - XOR Replace 题解 可以发现一次操作相当于一次置换 对于每个a上的位置映射到b对应 可以找到置换群中的 所有轮换 一个k个元素的轮换 ...

  4. CSS(五)

    定位 关于定位 我们可以使用css的position属性来设置元素的定位类型,postion的设置项如下: relative 生成相对定位元素,元素所占据的文档流的位置不变,元素本身相对文档流的位置进 ...

  5. 原生javascript制作时钟

    用JavaScript来制作实时的时钟 效果图如下: 接下来,我会一步一步向大家介绍如何制作,并将里面的一些值得注意的事项提出来. 首先是把框架搭构起来, <div> <canvas ...

  6. Spring MVC 原理探秘 - 容器的创建过程

    1.简介 在上一篇文章中,我向大家介绍了 Spring MVC 是如何处理 HTTP 请求的.Spring MVC 可对外提供服务时,说明其已经处于了就绪状态.再次之前,Spring MVC 需要进行 ...

  7. Gradle入门与使用

    注:此篇博客主要是看官网的学习笔记:https://docs.gradle.org/current/userguide/installation.html 一.安装: 1.Gradle有内置的groo ...

  8. js一些代码

    1判断金额正则 var reg = /(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/; var money ...

  9. [LeetCode] Number of Lines To Write String 写字符串需要的行数

    We are to write the letters of a given string S, from left to right into lines. Each line has maximu ...

  10. 织梦手机站下一篇变上一篇而且还出错Request Error!

    最新的织梦dedecms程序手机版下一篇变上一篇而且还出错Request Error!,这是因为官方写错了一个地方 打开 /include/arc.archives.class.php 找到 $mli ...