首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++ web开发

C++ web开发
EN

Stack Overflow用户
提问于 2011-04-19 09:26:47
回答 2查看 2.3K关注 0票数 2

我理解由于C++不是动态的,所以它不是一个特别好的网站构建基础,但我相信它在一定程度上归因于支持。有没有像根一样运行C++程序的服务器,例如node.js创建服务器,然后处理所有进入根的请求,而CGI (我不想使用)就像一个Php网页,仅限于运行缓慢的Apache和恼人的重写。有没有什么C++库可以让你轻松地嵌入服务器。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-04-19 09:57:08

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

Use ,use ,use use

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

使用HTTP库

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

代码语言:javascript
复制
#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这样的简单脚本语言-否则,只需准备好在每次迭代中编译。

票数 5
EN

Stack Overflow用户

发布于 2011-04-19 09:39:53

我知道C++不是动态的

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

当您需要C或C++的性能时,您可以用C或CGI编写脚本。有几个库可以简化这一过程,你应该能够找到教程(a quick Google search带来了this)。

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

我不建议在网站上使用Qt,它似乎并不是真的打算这么做,而且可能会有很多你不需要的东西。如果你采用这种方式,更简单的C/C++会更好(也更快)。

与脚本语言(这是某种观点)相比,您可能希望精心编写和优化的C/C++速度更快,占用的内存更少,但它很可能在最初编写、稍后修改和可能的调试中稍微困难一点。不过,如果你的问题需要的话,这是一个可行的选择。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5710623

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档