Node.js的C++移植版本 Node.native

分享到:

node.nativenode.js 的一个 C++11 (aka C++0x) 的一个移植。

Node 公开宣称的目标是 “旨在提供一种简单的构建可伸缩网络程序的方法”。当前的服务器程序有什么问题?我们来做个数学题。在 Java™ 和 PHP 这类语言中,每个连接都会生成一个新线程,每个新线程可能需要 2 MB 的配套内存。在一个拥有 8 GB RAM 的系统上,理论上最大的并发连接数量是 4,000 个用户。随着您的客户群的增长,如果希望您的 Web 应用程序支持更多用户,那么,您必须添加更多服务器。当然,这会增加服务器成本、流量成本和人工成本等成本。除这些成本上升外,还有一个潜在技术问题,即用户可能针对每个请求使用不同的服务器,因此,任何共享资源都必须在所有服务器之间共享。鉴于上述所有原因,整个 Web 应用程序架构(包括流量、处理器速度和内存速度)中的瓶颈是:服务器能够处理的并发连接的最大数量。

Node 解决这个问题的方法是:更改连接到服务器的方式。每个连接发射一个在 Node 引擎的进程中运行的事件,而不是为每个连接生成一个新的 OS 线程(并为其分配一些配套内存)。Node 声称它绝不会死锁,因为它根本不允许使用锁,它不会直接阻塞 I/O 调用。Node 还宣称,运行它的服务器能支持数万个并发连接。

现在您有了一个能处理数万个并发连接的程序,那么您能通过 Node 实际构建什么呢?如果您有一个 Web 应用程序需要处理这么多连接,那将是一件很 “恐怖” 的事!那是一种 “如果您有这个问题,那么它根本不是问题” 的问题。在回答上面的问题之前,我们先看看 Node 的工作原理以及它的设计运行方式。

示例代码:

#include <iostream>
#include "http.h"
using namespace native::http;
int main()
{
http server;
if(server.listen("0.0.0.0", 8080, [](request& req, response& res){
res.set_status(200);
res.set_header("Content-Type", "text/plain");
res.end("C++ FTW\n");
})) std::cout << "Server running at http://0.0.0.0:8080/" << std::endl;
return native::run();
}

项目主页:http://www.open-open.com/lib/view/home/1328801430077

昵    称:
验证码:

相关文档:

  • 开源编译器 Open64
    Open64最初的名字叫Pro64,后改名为Open64,采用GPL许可证,参与开发的机构包括了SGI、中科院、惠普和特拉华大学。...
  • 开源GUI框架库:Nana C++ Library
    Nana C++ Library,一个纯粹的C++库,让你能完全发挥你的C++知识/技巧/手法来编写GUI,这是用C++开发GUI的一个重大的进步。类似标准库和boost...
  • C++ typename的起源与用法
    侯捷在Effective C++的中文版译序中提到: C++的难学,还在于它提供了四种不同(但相辅相成)的程序设计思维模式:procedural-based, object-b...
  • Linux C 的工具包:JustKit
    JustKit 是一个简单易于使用的 Linux C 的工具包...
  • WebAppLib - 类Unix操作系统环境下Web开发的C++类库
    WebAppLib(Web Application Library)是一系列主要用于类Unix操作系统环境下Web开发的C++类库...
  • C++的数据库访问层 Tntdb
    Tntdb 是一个 C++ 的类库用于访问数据库,实现了数据库独立的访问层,运行时加载驱动,当前支持 postgresql, sqlite3, mysql 和 oracle...
  • C++界面库:DuiEngine
    一个C++界面库. 1. 作者将金山的BKWin进行了深度改写,从而使之更易于使用和开发。相比传统的WTL而言,DUIEngine增加了许多窗口特效,...
  • MOTAN - 最快的 C++ Servlet 容器
    MOTAN是一个仿照 Java Servlet API 2.3实现的一个C++ Servlet Container。开发人员在动态库中实现C++ Servlet,包括 HTTP adaptor。...
  • Windows下用Eclipse搭建C/C++开发环境
    Windows下C/C++的IDE有很多,要学习Eclipse,所以就选下面要讲的Eclipse + GNU toolchain(话说toolchain这个词很形象)....
  • C++ 解析器线程的传播库:libpondyparser
    libpondyparser 是另一个使用 Markov 模型的多核 C++ 解析器线程的传播库,包含了一个使用增强学习传播的线程来打包一个指向统计解析库的...
  • 常用C语言函数库 libasn
    libasn 提供了一些编程里非常有用的功能和函数库(C语言),例如列表、哈希表、拓扑排序、内存管理、垃圾收集、应用层调试、正则表...
  • C++人工智能框架:OpenCog
    OpenCog 是一个人工智能和人工总体智能框架(AGI),OpenCog 的认知算法都是个体自身的创新,但是总体架构是坚持认知协同作用原则的。...
  • Concurrency Control Flow 并发流程控制
    回调函数是指将函数(这里的函数是泛指某一块可执行代码的引用,如C++的仿函数或Java中的接口和对象)作为参数传递给另一个函数。...
  • linux c 内存泄露检测工具:valgrind
    Linux c/c++上常用内存泄露检测工具有valgrind, Rational purify。Valgrind免费。Valgrind 可以在 32 位或 64 位 PowerPC/Linux 内核上工作。...
  • 手写识别开发包:Zinnia
    Zinnia 是一个简单、可定制和可移植的手写识别系统,基于 Support Vector Machines (SVM) 算法。SVM算法简介。...
  • 将二进制文件加到C源码中的工具包:incbin.bat
    有时你需要将二进制数据嵌入至C / C++程序。 INCBIN是一个跨平台的工具,刚好用来做到这一点。不像其他的解决方案,INCBIN是使用操作系...
  • 构建高性能系统的C语言事件框架:libPhenom
    libPhenom 是 Facebook 发布的一个C语言事件框架,用于构建高性能和高可扩展的系统。支持多线程,提供内存管理和常用数据结构(hash tables, l...
  • Qt实现的C++框架:qtioccontainer
    QtIOCContainer 是一个用Qt实现的C++框架 控制反转概念灵感来自于Spring框架。他使用Qt的元对象系统和插件系统来实现C++的反射机制。...
  • gevent:轻松异步 I/O
    gevent是一个使用完全同步编程模型的可扩展的异步I/O框架。...
  • C语言编译器 nwcc
    nwcc 是一个Unix系统的C语言编译器,支持 FreeBSD/OpenBSD/Linux/Solaris on 80x86 (with nasm and gas), FreeBSD/Linux on AMD64 (with yasm and gas), Solaris on SPARC (64-bi...