yaLanTingLibs
A Collection of C++20 libraries, include struct_pack, struct_json, coro_rpc and async_simple
yaLanTingLibs is a collection of C++20 libraries, now it contains struct_pack, struct_json, coro_rpc and async_simple, more and more cool libraries will be added into yaLanTingLibs(such as http.) in the future.
The target of yaLanTingLibs: provide very easy and high performance C++20 libraries for C++ developers, it can help to quickly build high performance applications.
OS (Compiler Version) | Status |
---|---|
Ubuntu 22.04 (clang 14.0.0) | |
Ubuntu 22.04 (gcc 11.2.0) | |
macOS Monterey 12 (AppleClang 14.0.0.14000029) | |
Windows Server 2022 (MSVC 19.33.31630.0) |
coro_rpc
Very easy-to-use, coroutine-based, high performance rpc framework with C++20, more than 2000w qps in echo scene. coro_rpc is a header only library.
You can finish a rpc server and rpc client in 5 minutes!
English API(TODO) | 中文API
Talk of coro_rpc on purecpp conference.
Vedio on purecpp conference, start from 04:55:08 of the vedio record.
quick example
1.define a rpc function as a local normal function.
// rpc_service.hpp
inline std::string echo(std::string str) { return str; }
2.register rpc function and start a server
#include "rpc_service.hpp"
#include <coro_rpc/coro_rpc_server.hpp>
int main() {
register_handler<echo>();
coro_rpc_server server(/*thread_num =*/10, /*port =*/9000);
server.start();
}
3.rpc client call rpc service
#include "rpc_service.hpp"
#include <coro_rpc/coro_rpc_client.hpp>
Lazy<void> test_client() {
coro_rpc_client client;
co_await client.connect("localhost", /*port =*/"9000");
auto r = co_await client.call<echo>("hello coro_rpc"); //传参数调用rpc函数
std::cout << r.result.value() << "\n"; //will print "hello coro_rpc"
}
int main() {
syncAwait(test_client());
}
More examples here.
struct_pack
Based on compile-time reflection, very easy to use, high performance serialization library, struct_pack is a header only library, it is used by coro_rpc now.
Only one line code to finish serialization and deserialization, 10-50x faster than protobuf.
English API(TODO) | 中文API
Talk of struct_pack on CppCon2022
Talk of struct_pack on purecpp conference.
Vedio on purecpp conference, start from 01:32:20 of the vedio record.
quick example
struct person {
int64_t id;
std::string name;
int age;
double salary;
};
person person1{.id = 1, .name = "hello struct pack", .age = 20, .salary = 1024.42};
// one line code serialize
std::vector<char> buffer = struct_pack::serialize(person1);
// one line code deserialization
auto person2 = deserialize<person>(buffer);
See more examples here.
struct_json
reflection-based json lib, very easy to do struct to json and json to struct.
quick example
#include "struct_json/json_reader.h"
#include "struct_json/json_writer.h"
struct person {
std::string name;
int age;
};
REFLECTION(person, name, age);
int main() {
person p{.name = "tom", .age = 20};
std::string str;
struct_json::to_json(p, str); // {"name":"tom","age":20}
person p1;
struct_json::from_json(p1, str);
}
async_simple
A C++ 20 coroutine library offering simple, light-weight and easy-to-use components to write asynchronous codes. See async_simple
Quick Start of coro_rpc
- clone repo
git clone https://github.com/alibaba/yalantinglibs.git
- build with cmake
mkdir build && cd build
cmake ..
make -j
- run tests
cd tests
ctest .
Benchmark
options:
./benchmark_client [threads] [client_pre_thread] [pipeline_size] [host] [port] [test_data_path] [test_time] [warm_up_time]
Build Options
option | description | default |
---|---|---|
CMAKE_BUILD_TYPE | build type | Release |
BUILD_WITH_LIBCXX | Build with libc++ | OFF |
USE_CONAN | Use conan package manager to handle dependencies | OFF |
ENABLE_SSL | Enable ssl support | OFF |
ENABLE_IO_URING | Enable io_uring support | OFF |
Dependencies
- doctest
- spdlog
- asio
- openssl (optional)
- async_simple
- iguana
Currently, asio and spdlog are put in thirdparty folder. doctest is put in tests folder.
How to generate document
For English document, run
doxygen Doxyfile
All files generated in docs/en
.
For Chinese document, run
doxygen Doxyfile_cn
All files generated in docs/cn
.
How to Contribute
- Create an issue in the issue template.
- Run tests and
git-clang-format HEAD^
locally for the change. - Create a PR, fill in the PR template.
- Choose one or more reviewers from contributors: (e.g., qicosmos, poor-circle, PikachuHyA).
- Get approved and merged.
Discussion group
DingTalk group
License
yaLanTingLibs is distributed under the Apache License (Version 2.0) This product contains various third-party components under other open-source licenses. See the NOTICE file for more information.