C++ web development

C++ web development

本文关键字:development web C++      更新时间:2023-10-16

我知道c++不是动态的,它不被视为一个特别好的基础来建立一个网站,但我相信它部分归结于支持。是否有任何服务器运行c++程序像根,例如node.js创建服务器,然后处理所有请求到根,而CGI(我不想使用)就像一个Php网页,限制缓慢的Apache与恼人的重写。有没有c++库可以让你很容易地嵌入一个服务器?

我最近(就在两天前)不得不用c++重写Java Jetty servlet(由于我也在使用OpenCV的一些JNI问题)。我有和你完全一样的问题,没有简单的答案(我也不想使用CGI)。我有几点建议:

使用boost,使用boost,使用boost
Boost使跨平台部署变得非常简单,而且(我敢说)很有趣!我的开发机器运行的是Windows 7,但我必须将服务器部署在Linux服务器上,boost使它非常容易。

使用HTTP库
对于我的项目,我找到了cpp-netlib,它使编写servlet(如果您甚至可以这样称呼它们)非常非常容易。它提供对requestresponse对象的访问,甚至支持多线程。以下是他们网站上的服务器示例:

#include <boost/network/protocol/http/server.hpp>
#include <string>
#include <iostream>
namespace http = boost::network::http;
struct hello_world;
typedef http::server<hello_world> server;
struct hello_world {
    void operator() (server::request const &request,
                     server::response &response) {
        std::string ip = source(request);
        response = server::response::stock_reply(
            server::response::ok, std::string("Hello, ") + ip + "!");
    }
};
int
main(int argc, char * argv[]) {
    if (argc != 3) {
        std::cerr << "Usage: " << argv[0] << " address port" << std::endl;
        return 1;
    }
    try {
        hello_world handler;
        server server_(argv[1], argv[2], handler);
        server_.run();
    }
    catch (std::exception &e) {
        std::cerr << e.what() << std::endl;
        return 1;
    }
    return 0;
}

非常整洁,(从我所看到的)它也非常健壮。不要(不要)编写自己的HTTP 1。x实现。我强烈反对这样做,因为这是一个巨大的时间投资,没有理由重新发明轮子。

做适合你的
如果需要服务器具有一些可热插拔的部件,可以随意使用简单的脚本语言,如LUA—否则,只需准备好在每次迭代时进行编译。

我明白c++不是动态的

它不是,这意味着您为网站编写的任何代码都必须以与服务器的软件包和操作系统兼容的方式编译,并且每次更改它时都要重新编译。您可能不想在生产服务器上重新编译,因此您可能会有另一台相同服务器的开销(您可能已经有了用于测试的服务器,这将使它成为一个非问题)。

你可以用C或c++写CGI脚本,当你需要性能的时候。有一些库可以简化这一点,你应该能够找到教程(一个快速的谷歌搜索带来了这个)。

在某些情况下,您还可以编写模块来扩展脚本语言。我知道PHP主要是用C实现的,我相信大多数其他脚本语言都允许添加C模块(c++可能有点困难,但应该小心或包装器)。你可以调查一下。

我不建议使用Qt的网站,它似乎不是真的打算,并潜在地携带很多东西,你不需要的。如果你走这条路,更简单的C/c++会更好(也更快)。

与脚本语言相比(这是一些观点),您可能会期望精心编写和优化的C/c++更快,内存使用更少,但它可能会在一开始编写,稍后修改和可能调试时有点困难。但是,如果您的问题需要它,这是一个可行的选择。