如何使用网络库用c++开发http服务器

bear234 2017-04-06 06:42:02
因为某些原因,我现在必须用c++去开发一个http服务器。

我在网上查到了一些库可以使用,比如有netlib、libmicrohttpd等,据说boost的asio也可以开发http服务器。
我看了一下netlib的hello world版本的简单服务器,代码如下:

#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;
}




我以前只接触过直接用socket写一些服务器。在用socket的时候,我需要考虑用阻塞还是非阻塞、如何用epoll、多线程处理客户端请求等问题。而我现在看这些网络库,感觉很简单,就是新建一个server对象,然后直接用它来处理客户端发送来的请求就可以了。

我的问题是:是不是这些库本身已经很好地处理了诸如c10k、用阻塞好还是非阻塞好等问题了?我是不是不需要关心如何架构才能最大化我的服务器的吞吐量等此类问题了?

另外还有个问题,就是以前用php开发网站的时候,总会涉及到cookie和session个问题,这些c++的网络库是如何处理cookie和session的?我的意思是说,如果用户的浏览器端保存了一个cookie,那么我的c++的服务器应该如何处理呢?如果我想用session,是不是这些库都提供了专门的函数?
...全文
207 回复 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

10,612

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 其他
社区管理员
  • 其他
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧