galay框架,异步协程网络框架,旨在实现高性能网络IO通信,能够快速搭建HttpServer,避免“回调地狱”,支持Linux和Mac平台,同时内部内置诸多功能库,如命令行解析库,加解密库,ETCD/MySql/Redis客户端库,限流器/熔断器等。
-
下载必要依赖openssl,g++(version > 9),cmake,spdlog,libaio(linux下)
sudo apt-get install libssl-dev g++ cmake libaio git clone https://github.com/gabime/spdlog.git cd spdlog mkdir build cd build && sudo make -j4 && make install
-
编译安装
mkdir build cd build cmake .. make -j4 && sudo make install
头文件安装在/user/local/include,库文件安装在/user/local/lib
-
使用
g++ example.cc -o example -lgalay # g++ example.cc -o example -lgalay-static具体使用请查看tutorial目录下的内容
- 快速搭建一个带命令行参数的高性能http服务器
#include "galay/galay.hpp"
class Handler {
public:
static galay::Coroutine<void> GetHelloWorldHandler(galay::RoutineCtx ctx, galay::http::HttpContext context) {
bool res = co_await context.GetStream()->SendResponse(ctx, galay::http::HttpStatusCode::OK_200, "Hello World", "text/plain");
co_await context.GetStream()->Close();
co_return;
}
};
int main(int argc, const char* argv[])
{
galay::args::App app("tutorial_echo_server");
app.Help("./tutorial_echo_server [OPTION] COMMAND\nOptions:\n -p,\t--port number\tremote port.");
galay::args::Arg::ptr port_arg = galay::args::Arg::Create("port");
port_arg->Short('p').Required(true).Input(true).IsInt();
app.AddArg(port_arg);
if(!app.Parse(argc, argv)) {
app.ShowHelp();
return -1;
}
uint32_t port;
try
{
port = port_arg->Value().ConvertTo<uint32_t>();
}
catch(const std::exception& e)
{
return -1;
}
galay::GalayEnv env({});
auto config = galay::http::HttpServerConfig::Create();
galay::http::HttpServer<galay::AsyncTcpSocket> server(config);
server.RouteHandler<galay::http::GET>("/hello", Handler::GetHelloWorldHandler);
server.Start({"", port});
getchar();
server.Stop();
return 0;
}- 运行示例
./tutorial_echo_server -p 8080- 快速搭建静态页面服务器
#include "galay/galay.hpp"
int main(int argc, const char* argv[])
{
galay::args::App app("tutorial_static_server");
app.Help("./tutorial_static_server [OPTION] COMMAND\nOptions:\n -p,\t--port number\tremote port.");
galay::args::Arg::ptr port_arg = galay::args::Arg::Create("port");
port_arg->Short('p').Required(true).Input(true).IsInt();
app.AddArg(port_arg);
if(!app.Parse(argc, argv)) {
app.ShowHelp();
return -1;
}
uint32_t port;
try
{
port = port_arg->Value().ConvertTo<uint32_t>();
}
catch(const std::exception& e)
{
return -1;
}
galay::GalayEnv env({});
auto config = galay::http::HttpServerConfig::Create();
galay::http::HttpServer<galay::AsyncTcpSocket> server(config);
server.RegisterStaticFileGetMiddleware("/static", "/var/static");
server.Start({"", port});
getchar();
server.Stop();
return 0;
}- 运行示例
./tutorial_static_server -p 8080