Wil*_*3uk 2 c++ web-development-server
我知道因为 C++ 不是动态的,所以它不被视为构建网站的特别好的基础,但我相信它部分地支持。是否有任何服务器像 root 一样运行 C++ 程序,例如 node.js 创建服务器,然后处理所有进入 root 的请求,但 CGI(我不想使用)就像一个 PHP 网页,有限用烦人的重写来减慢 Apache 的速度。是否有任何 C++ 库可以让您轻松嵌入服务器。
我最近(就像两天前一样)不得不用 C++ 重写一个 Java Jetty servlet(由于我也在使用的 OpenCV 的一些 JNI 问题)。我和你有完全相同的问题,没有简单的答案(我也不想使用 CGI)。我建议几点:
使用提升,使用提升,使用提升。
Boost使跨平台部署变得非常简单而且(我敢说)有趣!我的开发机器运行的是 Windows 7,但我不得不在 Linux 服务器上部署服务器,而 boost 让它变得非常容易。
使用 HTTP 库
对于我的项目,我发现了cpp-netlib,这使得编写 servlet(如果您甚至可以这样称呼它们)非常容易。它提供对request和response对象的访问,甚至支持多线程。这是他们网站上的服务器示例:
#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;
}
Run Code Online (Sandbox Code Playgroud)
非常整洁,(据我所见)它也非常坚固。不要(不要)编写自己的 HTTP 1.x 实现。我强烈建议不要这样做,因为这是一项巨大的时间投资,而且没有理由重新发明轮子。
做对你
有用的事情如果你需要你的服务器有一些热插拔的部分,随意使用像 LUA 这样简单的脚本语言 - 否则,只需准备好在每次迭代时进行编译。
| 归档时间: |
|
| 查看次数: |
2292 次 |
| 最近记录: |