博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
比NGINX更快:nginx-1.15.5 vs mongols-1.2.3
阅读量:6079 次
发布时间:2019-06-20

本文共 1984 字,大约阅读时间需要 6 分钟。

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

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

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

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

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

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

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

下载:

先看压测比较:

 

再看代码:

1 #include 
2 #include
3 #include
4 #include
5 #include
6 #include
7 8 9 static void signal_cb(int sig, siginfo_t *, void *);10 static std::vector
pids;11 12 int main(int, char**) {13 // daemon(1, 0);14 auto f = [](const mongols::request & req) {15 if (req.method == "GET" && req.uri.find("..") == std::string::npos) {16 return true;17 }18 return false;19 };20 int port = 9090;21 const char* host = "127.0.0.1";22 mongols::web_server23 server(host, port, 5000, 512000, 0/*must be 0*/);24 server.set_root_path("html");25 server.set_mime_type_file("html/mime.conf");26 server.set_list_directory(true);27 server.set_enable_mmap(false);28 29 30 int child_process_len = std::thread::hardware_concurrency();31 mongols::forker(child_process_len32 , [&]() {33 server.run(f);34 }35 , pids);36 for (int i = 0; i < child_process_len; ++i) {37 mongols::process_bind_cpu(pids[i], i);38 }39 40 const int sig_len = 4;41 int sigs[sig_len] = {SIGHUP, SIGTERM, SIGINT, SIGQUIT};42 struct sigaction act;43 memset(&act, 0, sizeof (struct sigaction));44 sigemptyset(&act.sa_mask);45 act.sa_sigaction = signal_cb;46 47 for (int i = 0; i < sig_len; ++i) {48 if (sigaction(sigs[i], &act, NULL) < 0) {49 perror("sigaction error");50 return -1;51 }52 }53 54 55 56 for (size_t i=0;i
0) {59 60 }61 }62 63 }64 65 static void signal_cb(int sig, siginfo_t *, void * ) {66 switch (sig) {67 case SIGTERM:68 case SIGHUP:69 case SIGQUIT:70 case SIGINT:71 for (auto & i : pids) {72 kill(i, SIGTERM);73 }74 break;75 default:break;76 }77 }

 

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

 

转载地址:http://ajagx.baihongyu.com/

你可能感兴趣的文章
HackTheGame 攻略 - 第四关
查看>>
js删除数组元素
查看>>
带空格文件名的处理(find xargs grep ..etc)
查看>>
华为Access、Hybrid和Trunk的区别和设置
查看>>
centos使用docker下安装mysql并配置、nginx
查看>>
关于HTML5的理解
查看>>
需要学的东西
查看>>
Internet Message Access Protocol --- IMAP协议
查看>>
Linux 获取文件夹下的所有文件
查看>>
对 Sea.js 进行配置(一) seajs.config
查看>>
第六周
查看>>
解释一下 P/NP/NP-Complete/NP-Hard 等问题
查看>>
javafx for android or ios ?
查看>>
微软职位内部推荐-Senior Software Engineer II-Sharepoint
查看>>
sql 字符串操作
查看>>
【转】Android布局优化之ViewStub
查看>>
网络安全管理技术作业-SNMP实验报告
查看>>
根据Uri获取文件的绝对路径
查看>>
Flutter 插件开发:以微信SDK为例
查看>>
.NET[C#]中NullReferenceException(未将对象引用到实例)是什么问题?如何修复处理?...
查看>>