C++ web development
C++ web development
我知道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(如果您甚至可以这样称呼它们)非常非常容易。它提供对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;
}
非常整洁,(从我所看到的)它也非常健壮。不要(不要)编写自己的HTTP 1。x实现。我强烈反对这样做,因为这是一个巨大的时间投资,没有理由重新发明轮子。
做适合你的
如果需要服务器具有一些可热插拔的部件,可以随意使用简单的脚本语言,如LUA—否则,只需准备好在每次迭代时进行编译。
我明白c++不是动态的
它不是,这意味着您为网站编写的任何代码都必须以与服务器的软件包和操作系统兼容的方式编译,并且每次更改它时都要重新编译。您可能不想在生产服务器上重新编译,因此您可能会有另一台相同服务器的开销(您可能已经有了用于测试的服务器,这将使它成为一个非问题)。
你可以用C或c++写CGI脚本,当你需要性能的时候。有一些库可以简化这一点,你应该能够找到教程(一个快速的谷歌搜索带来了这个)。
在某些情况下,您还可以编写模块来扩展脚本语言。我知道PHP主要是用C实现的,我相信大多数其他脚本语言都允许添加C模块(c++可能有点困难,但应该小心或包装器)。你可以调查一下。
我不建议使用Qt的网站,它似乎不是真的打算,并潜在地携带很多东西,你不需要的。如果你走这条路,更简单的C/c++会更好(也更快)。
与脚本语言相比(这是一些观点),您可能会期望精心编写和优化的C/c++更快,内存使用更少,但它可能会在一开始编写,稍后修改和可能调试时有点困难。但是,如果您的问题需要它,这是一个可行的选择。
- 用于将C++代码转换为 Web 程序集的脚本未终止
- C# DLL 从C++应用程序调用 SOAP Web 服务
- OpenCV(C++)处理来自JavaScript / Web Assembly的图像数据
- 用于 progmem 的C++和头文件压缩的 Web 文件字节数组
- 来自带有mbedtls TLS的Mongoose Web服务器的错误消息
- 使用 ESP8266/8285 将字符串从 Web 服务器转换为字节数组
- 在 c++ WWSAPI Web 服务中处理 WS-Security PasswordDigest 模式
- libtorrent是否支持带摘要身份验证的http web种子
- 我的web应用程序的用户需要在浏览器上手动启用本机客户端吗
- Java JNI GDAL 本机库在重新部署为 Web 应用程序时出现类加载器错误
- 如何捕获从 MFC Web 浏览器 c++ 发出的 GET/POST 请求
- 在能够从 Web 浏览器访问大型数组数据的同时存储它的最可行方法是什么?
- 如何为C Web开发配置LAMPP
- 在C/C 接受JSON中创建REST Web服务
- Boost-Beast 异步 Web 套接字 服务器-客户端异步读写 不在控制台上写入输出
- 用于管理 CATIA 文件的 Web 应用程序
- 从QT的Web服务中解析未命名的JSON数组
- 可能在OpenShift3上部署C Web服务器
- 如何使用boost :: asio访问Web服务
- C++ web development