繁体   English   中英

C ++ Web开发

[英]C++ web development

我了解,由于C ++不是动态的,因此C ++并不是构建网站的特别重要的基础,但我认为它在一定程度上会受到支持。 是否有像根目录一样运行C ++程序的服务器,例如node.js创建服务器,然后处理所有发送到根目录的请求,但CGI(我不想使用)就像是Php网页一样,受限制通过烦人的重写来减慢Apache的速度。 是否有任何C ++库可让您轻松嵌入服务器。

最近,我(如两天前)不得不用C ++重写Java Jetty servlet(由于我也在使用OpenCV的一些JNI问题)。 我有与您完全相同的问题,没有简单的答案(我也不想使用CGI)。 我建议几件事:

使用boost ,使用boost ,使用boost
Boost使跨平台部署绝对变得微不足道,而且(敢说)很有趣! 我的开发机运行Windows 7,但是我不得不将服务器部署在Linux服务器上,并且增强功能使其变得异常简单。

使用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脚本。 有一些库可以简化该过程,您应该能够找到教程( 对此进行 了快速的Google搜索 )。

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

我不建议在网站上使用Qt,因为Qt并非真的打算这样做,并且可能携带许多您不需要的东西。 如果您走这条路,那么简单的C / C ++会更好(更快)。

与脚本语言相比(有些意见),您可能期望精心编写和优化的C / C ++会更快一些,并且内存使用较少,但是一开始编写,稍后修改和可能调试。 但是,如果您的问题需要这样做,这是一个可行的选择。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM