Skip to content

Repository files navigation

Galay

Static Badge Static Badge Static Badge Static Badge

简介

galay框架,异步协程网络框架,旨在实现高性能网络IO通信,能够快速搭建HttpServer,避免“回调地狱”,支持Linux和Mac平台,同时内部内置诸多功能库,如命令行解析库,加解密库,ETCD/MySql/Redis客户端库,限流器/熔断器等。

目录结构

安装

  1. 下载必要依赖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
  2. 编译安装

    mkdir build
    cd build
    cmake ..
    make -j4 && sudo make install

    头文件安装在/user/local/include,库文件安装在/user/local/lib

  3. 使用

    g++ example.cc -o example -lgalay
    # g++ example.cc -o example -lgalay-static

    具体使用请查看tutorial目录下的内容

使用

  1. 快速搭建一个带命令行参数的高性能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
  1. 快速搭建静态页面服务器
#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

About

No description, website, or topics provided.

Resources

Stars

3 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages