开源 企业版 高校版 私有云 模力方舟 AI 队友
代码拉取完成,页面将自动刷新
forked from cppcoder/cppcms
加入 Gitee
与超过 1400万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
已有帐号? 立即登录
文件
master
分支 (6)
标签 (5)
master
revert-35-build-nogzip
http_1.1
boost_locale_merge
v1.0_fixes
multiple-event-loops
v1.2.1
v1.2.0
v1.1.1
v1.1.0
v1.0.5
master
分支 (6)
标签 (5)
master
revert-35-build-nogzip
http_1.1
boost_locale_merge
v1.0_fixes
multiple-event-loops
v1.2.1
v1.2.0
v1.1.1
v1.1.0
v1.0.5
克隆/下载
克隆/下载
提示
下载代码请复制以下命令到终端执行
为确保你提交的代码身份被 Gitee 正确识别,请执行以下命令完成配置
初次使用 SSH 协议进行代码克隆、推送等操作时,需按下述提示完成 SSH 配置
1 生成 RSA 密钥
2 获取 RSA 公钥内容,并配置到 SSH公钥
在 Gitee 上使用 SVN,请访问 使用指南
使用 HTTPS 协议时,命令行会出现如下账号密码验证步骤。基于安全考虑,Gitee 建议 配置并使用私人令牌 替代登录密码进行克隆、推送等操作
Username for 'https://gitee.com': userName
Password for 'https://userName@gitee.com': # 私人令牌
master
分支 (6)
标签 (5)
master
revert-35-build-nogzip
http_1.1
boost_locale_merge
v1.0_fixes
multiple-event-loops
v1.2.1
v1.2.0
v1.1.1
v1.1.0
v1.0.5
cppcms
/
tools
/
benchmarks.cpp
cppcms
/
tools
/
benchmarks.cpp
benchmarks.cpp 4.33 KB
一键复制 编辑 原始数据 按行查看 历史
Artyom Beilis 提交于 2011年10月02日 22:34 +08:00 . Updated a small tool to make it more useful
#include <booster/aio/io_service.h>
#include <booster/aio/stream_socket.h>
#include <booster/aio/buffer.h>
#include <booster/posix_time.h>
#include <booster/shared_ptr.h>
#include <iostream>
#include <string>
class client;
struct bind_io {
public:
typedef void (client::*member_function)(booster::system::error_code const &e,size_t n);
bind_io(member_function f,client *c) : c_(c) , m_(f)
{
}
void operator()(booster::system::error_code const &e,size_t n) const;
private:
client *c_;
member_function m_;
};
struct bind_handler {
public:
typedef void (client::*member_function)(booster::system::error_code const &e);
bind_handler(member_function f,client *c) : c_(c) , m_(f)
{
}
void operator()(booster::system::error_code const &e) const;
private:
client *c_;
member_function m_;
};
int total,max_total;
int stopped,max_stopped;
int total_read;
std::string first_request;
class client {
public:
client(booster::aio::io_service &srv,std::string ip,int port,std::string url) :
socket_(srv)
{
request_ = "GET " + url + " HTTP/1.0\r\n"
"Host:" + ip + "\r\n"
"Connection:close\r\n"
"\r\n";
ep_ = booster::aio::endpoint(ip,port);
}
void run()
{
if(total>= max_total) {
stopped++;
if(stopped == max_stopped)
socket_.get_io_service().stop();
return;
}
is_first_ = total++ == 0;
if((total-1) / (max_total / 10) != total / (max_total/10) ) {
std::cout << total << std::endl;
}
socket_.open(booster::aio::pf_inet);
socket_.set_option(booster::aio::basic_socket::tcp_no_delay,1);
socket_.async_connect(ep_,bind_handler(&client::on_connected,this));
}
void on_connected(booster::system::error_code const &e)
{
handle_error(e);
socket_.async_write(booster::aio::buffer(request_),bind_io(&client::on_written,this));
}
void on_written(booster::system::error_code const &e,size_t)
{
handle_error(e);
socket_.async_read_some(booster::aio::buffer(chunk,sizeof(chunk)),bind_io(&client::on_read,this));
}
void on_read(booster::system::error_code const &e,size_t n)
{
if(is_first_) {
first_request.append(chunk,n);
}
total_read+=n;
if(e==booster::system::error_code(booster::aio::aio_error::eof,booster::aio::aio_error_cat)) {
booster::system::error_code err;
socket_.shutdown(booster::aio::stream_socket::shut_rdwr,err);
socket_.close(err);
run();
}
else {
on_written(e,0);
}
}
void handle_error(booster::system::error_code const &e)
{
if(e) {
throw booster::system::system_error(e);
}
}
private:
char chunk[65536];
booster::aio::stream_socket socket_;
booster::aio::endpoint ep_;
std::string request_;
bool is_first_;
};
void bind_io::operator()(booster::system::error_code const &e,size_t n) const
{
(c_->*m_)(e,n);
}
void bind_handler::operator()(booster::system::error_code const &e) const
{
(c_->*m_)(e);
}
void help()
{
std::cerr <<
"benchmark [options] \n"
"--help display help\n"
"--ip target ip - default 127.0.0.1\n"
"--port target port - default 8080\n"
"--url target url - default \"/\"\n"
"--req requests number - default 10000\n"
"--con concurrency - default 10 connections\n"
<< std::endl;
exit(1);
}
int main(int argc, char **argv)
{
std::string ip="127.0.0.1";
int port = 8080;
std::string url="/";
max_total = 10000;
max_stopped = 10;
for(int i=1;i<argc;i++) {
std::string curr = argv[i];
if(curr == "--help")
help();
else {
if(i+1>= argc) {
help();
break;
}
std::string val=argv[i+1];
i++;
if(curr == "--ip")
ip=val;
else if(curr == "--port")
port = atoi(val.c_str());
else if(curr == "--url")
url = val;
else if(curr == "--req")
max_total = atoi(val.c_str());
else if(curr == "--con")
max_stopped = atoi(val.c_str());
else
help();
}
}
booster::ptime start,end;
try {
std::vector<booster::shared_ptr<client> > clients(max_stopped);
booster::aio::io_service srv;
for(size_t i=0;i<clients.size();i++) {
clients[i].reset(new client(srv,ip,port,url));
}
start = booster::ptime::now();
for(size_t i=0;i<clients.size();i++)
clients[i]->run();
srv.run();
end = booster::ptime::now();
}
catch(std::exception const &e)
{
std::cerr << e.what() << std::endl;
return 1;
}
std::cout << first_request << std::endl;
std::cout << "Req/s:" << total / booster::ptime::to_number(end-start) << std::endl;
std::cout << "Size: " << total_read / total << std::endl;
}
Loading...
举报
举报成功
我们将于2个工作日内通过站内信反馈结果给你!
请认真填写举报原因,尽可能描述详细。
请选择举报类型
取消
发送
误判申诉

此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。

如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。

取消
提交

简介

CppCMS Framework
暂无标签
MIT
使用 MIT 开源许可协议
, MIT
使用 MIT 开源许可协议
取消

发行版

暂无发行版

贡献者

全部

近期动态

不能加载更多了
编辑仓库简介
简介内容
主页
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
C++
1
https://gitee.com/HongYii/cppcms.git
git@gitee.com:HongYii/cppcms.git
HongYii
cppcms
cppcms
master
点此查找更多帮助

搜索帮助

评论
仓库举报
回到顶部
登录提示
该操作需登录 Gitee 帐号,请先登录后再操作。
立即登录
没有帐号,去注册

AltStyle によって変換されたページ (->オリジナル) /