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) |
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.
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() {
coro_rpc_server server(/*thread_num =*/10, /*port =*/9000);
server.register_handler<echo>();
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.
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
(Slides) A Faster Serialization Library Based on Compile-time Reflection and C++ 20 of struct_pack on CppCon2022
Slides of struct_pack on purecpp conference.
(Vedio) A Faster Serialization Library Based on Compile-time Reflection and C++ 20 on cppcon2022
Vedio on purecpp conference, start from 01:32:20 of the vedio record.
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.
reflection-based json lib, very easy to do struct to json and json to struct.
#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);
}
A C++ 20 coroutine library offering simple, light-weight and easy-to-use components to write asynchronous codes. See async_simple
- 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 .
options:
./benchmark_client [threads] [client_pre_thread] [pipeline_size] [host] [port] [test_data_path] [test_time] [warm_up_time]
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 |
- doctest
- asio
- openssl (optional)
- async_simple
- iguana
Currently, asio and frozen are put in thirdparty folder. doctest is put in tests folder.
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
.
- 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.
DingTalk group
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.