Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

History

50 Commits

Repository files navigation

purecpp社区开源项目列表

社区网站www.purecpp.cn

微信公号: purecpp

格式

项目名称:

状态:(已发布/孵化中)

需要的C++版本:

项目简介:

code first:(10行以内的代码展示项目)

项目列表

已发布

孵化中

rest_rpc

项目名称:rest_rpc

状态:已发布

需要的C++版本:C++11

项目简介:

rest_rpc是一个高性能、易用、跨平台、header only的c++11 rpc库,它的目标是让tcp通信变得非常简单易用,零依赖,下载下来就可以直接使用

code first:

//server
std::string echo(rpc_conn conn, const std::string& src) {
return src;
}
server.register_handler("echo", echo);
//client
std::string result = client.call<std::string>("echo", "hello"); //sync call
std::future<std::string> future = client->async_call<FUTURE>("echo", "hello"); //future
client.async_call("echo", [](boost::system::error_code ec, string_view data){ //async call
std::cout << "echo " << as<std::string>(data) << '\n';
});

cinatra

项目名称:cinatra

状态:已发布

需要的C++版本:C++17

项目简介:

cinatra是一个高性能易用的跨平台http(server和client)框架,它是用modern c++(c++17)开发的,它的目标是提供一个快速开发的c++ http框架。零依赖,下载下来就可以直接使用。它的主要特点如下:

统一而简单的接口 header-only 跨平台 高效 支持面向切面编程

cinatra目前支持了http1.1/1.0, ssl、websocket和文件上传下载, 你可以用它轻易地开发一个http服务器。

code first:

//server
server.set_http_handler<GET, POST>("/", [](request& req, response& res) mutable{
res.set_status_and_content(status_type::ok, "hello world");
});
//client
std::string uri = "http://www.purecpp.org";
response_data result = client->get(uri); //sync get
client->async_get(uri, [](response_data data) {// async getprint(data);
});

iguana

项目名称:iguana

状态:已发布

需要的C++版本:C++17

项目简介:通用的跨平台的序列化引擎,支持c++对象到json、xml等格式的相互转换,零依赖,下载下来就可以直接使用

code first:

structperson{
std::string name;
int age;
};
REFLECTION(person, name, age) //define meta data//serialize and deserialize
person p = { "tom", 28 };
iguana::string_stream ss;
iguana::json::to_json(ss, p);
iguana::json::from_json(p, ss.str());

ormpp

项目名称:ormpp

状态:已发布

需要的C++版本:C++17

项目简介:ormpp是一个跨平台易用的ORM库,最重要的目标就是让c++中的数据库编程变得简单,为用户提供统一的接口,支持多种数据库,提高数据库开发效率。

code first:

structperson{
int id;
std::string name;
int age;
};
REFLECTION(person, id, name, age)
person p = {1, "test1", 2};
mysql.insert(p);
std::vector<person> result = mysql.query<person>(); //get allauto result = mysql.query<std::tuple<std::string>>("select name from person"); //get part

feather

项目名称:feather

状态:已发布

需要的C++版本:C++17

项目简介:

Feather是一个快速开发的跨平台的modern c++ web框架,Feather的目标是让使用者快速开发一个高性能的web网站。

code first:

voidcomment(request& req, response& res) {
pp_comment comment{};//ommit init of comment.int r = dao.add_object(comment);
if (r < 0) {
res.set_status_and_content(status_type::internal_server_error);
}
else {
res.redirect("./detail?id=" + post_id);
}
}
server.set_http_handler<POST>("/comment", comment, check_login{}, check_comment_input{});
//post request
http://purecpp.org/comment

asio_redis_client

项目名称:asio_redis_client

状态:已发布

需要的C++版本:C++11

项目简介:

an easy to use, thread-safe, cross-platform async redis client implemented in c++11.

The best c++ redis client!

code first:

 redis_client->set("hello", "world", [](RedisValue value) {
if(value.isError()){
std::cout<<"error:"<<value.toString()<<'\n';
return;
}
std::cout << "set: " << value.toString() << '\n';
});
redis_client->get("hello", [](RedisValue value) {
std::cout << "get: " << value.toString() << '\n';
});

future

项目名称:future

状态:已发布

需要的C++版本:C++11

项目简介:

a std::future extension implemented in c++11.

C++11标准中提供了std::future和std::promise,但是标准库的future无法实现链式调用,无法满足异步并行编程的场景, 这个库提供了多线程异步并行的解决方法。

code first:

auto future = Async([]{
return42;
}).Then([](int i){
return i + 2;
}).Then([](int x){
returnstd::to_string(x);
});
std::string str = future.Get(); //44

NoahGameFrame

项目名称:NoahGameFrame

状态:已发布

需要的C++版本:C++11

项目简介:

C++跨平台插件式,模块化的游戏服务器架构,面向接口编程,下载即用.

code first:

boolNFHelloWorld3Module::Init()
{
m_pKernelModule = pPluginManager->FindModule<NFIKernelModule>();
m_pKernelModule->AddClassCallBack(NFrame::Player::ThisName(), this, &NFHelloWorld3Module::OnClassCallBackEvent);
}
intNFHelloWorld3Module::OnClassCallBackEvent(constNFGUID& self, const std::string& className, constCLASS_OBJECT_EVENT event, const NFDataList& arg)
{
m_pEventModule->AddEventCallBack(self, 1, this, &NFHelloWorld3Module::OnEvent);
m_pKernelModule->SetPropertyInt(self, "Hello", 1);
m_pKernelModule->SetPropertyString(self, "Hello", "hello world");
return0;
}

ajson

项目名称:ajson

状态:已发布

需要的C++版本:C++11

项目简介:

a utility for serialize C++ and json.

code first:

structPerson{
std::string Name;
int Age;
};
AJSON(Person , Name , Age)
intmain(int argc,char* argv[]){
Person obj;
char * json= "{\"Name\" : \"Boo\", \"Age\" : 28}";
ajson::load_from_buff(obj,json);
return0;
}

plugincpp

项目名称:plugincpp

状态:孵化中

需要的C++版本:C++11

项目简介:

现代C++跨平台插件框架,零依赖,下载即用。处于开发中状态。

code first:

TODO

raftcpp

项目名称:raftcpp

状态:孵化中

需要的C++版本:C++17

项目简介:

An implementation of Raft consensus algorithm in modern C++.

code first:

TODO

moon

项目名称:moon

状态:已发布

需要的C++版本:C++17

项目简介:

C++编写的轻量级游戏服务器框架,采用Actor模型,C/CPP编写核心库,Lua编写逻辑代码的开发方式,框架专注提供游戏开发核心功能。

code first:

---Scene servicefunctionCMD.PlayerMove(targetPos, speed)
--call navmesh service(write with cpp navmeshlib),return path pointsreturnmoon.co_call("lua", addr_namvesh, "FindPath", startPos, targetPos)
end---Player servicelocalpath, err=moon.co_call("lua", addr_scene, "PlayerMove", {x=123.0,y=124.0}, 1.0)
-- do something

drogon

项目名称: drogon

状态: 已发布

需要的C++版本: C++14

项目简介:

Drogon是一个基于C++14/17的Http应用高性能跨平台异步框架,使用Drogon可以方便的使用C++构建各种类型的Web应用程序。

code first:

#include<drogon/drogon.h>usingnamespacedrogon;intmain()
{
app().setLogPath("./")
.setLogLevel(trantor::Logger::kWarn)
.addListener("0.0.0.0", 80)
.setThreadNum(16)
.enableRunAsDaemon()
.run();
}

workflow

项目名称: workflow

状态: 已发布

需要的C++版本: C++11

项目简介:

Workflow可以同时用于异步调度和并行计算,自带Http/Redis/MySQL/Kafka协议,除OpenSSL无其他依赖,通过任务流模式为用户提供完备的通信计算融为一体的编程范式,自带服务治理,是一个设计优雅的企业级编程引擎,在搜狗内部支撑搜索服务、云输入法、在线广告的每日数百亿以上的请求。

code first:

intmain()
{
WFHttpServer server([](WFHttpTask *task) {
task->get_resp()->append_output_body("<html>Hello World!</html>");
});
if (server.start(8888) == 0) { // start server on port 8888getchar(); // press "Enter" to end.
server.stop();
}
return0;
}

srpc

项目名称: srpc

状态: 已发布

需要的C++版本: C++11

项目简介:

srpc是基于workflow开发的RPC系统,兼具高性能和低门槛。支持IDL:Protobuf/Thrift;支持协议:SRPC/BRPC/ThriftFramed/ThriftHttp;支持压缩类型:snappy/gzip/zlib/lz4;支持json且可使用Http进行跨语言。自带部分代码生成,其中thrift纯手工解析,并且打通workflow自带的其他功能包括任务流、计算调度和服务治理等。

code first:

intmain()
{
Example::SRPCClient client("127.0.0.1", 1412);
EchoRequest req;
req.set_message("Hello, srpc!");
client.Echo(&req, [](EchoResponse *response, RPCContext *ctx) {
printf("%s\n", response->DebugString().c_str());
});
pause();
return0;
}

librf

项目名称: librf

状态: 已发布

需要的C++版本: C++17(msvc&clang) / C++20(gcc)

项目简介:

一个基于C++20 coroutines编写的无栈协程库。

code first:

usingnamespaceresumef;usingnamespaceasio::ip;future_t<> RunPingPongEchoClient(asio::io_service & ios, tcp::resolver::iterator ep)
{
std::array<char, BUF_SIZE> read_buff_;
std::array<char, BUF_SIZE> write_buff_;
tcp::socket socket_{ ios };
co_awaitasio::async_connect(socket_, ep, rf_task);
for (auto & c : write_buff_)
c = 'A' + rand() % 52;
for (;;)
{
co_awaitasio::async_write(socket_, asio::buffer(write_buff_), rf_task);
co_await socket_.async_read_some(asio::buffer(read_buff_), rf_task);
}
}

nebula

项目名称: nebula

状态: 已发布

需要的C++版本: C++14(gcc&clang), 重度依赖 Facebook folly

项目简介:

Nebula Graph 是一款开源的图数据库,擅长处理千亿个顶点和万亿条边的超大规模数据集。

code first:

namespacenebula {
namespacestorage {
folly::SemiFuture<StorageRpcResponse<storage::cpp2::QueryResponse>> getNeighbors(
GraphSpaceID space,
const std::vector<VertexID> &vertices,
const std::vector<EdgeType> &edgeTypes,
std::string filter,
std::vector<storage::cpp2::PropDef> returnCols,
folly::EventBase* evb = nullptr);
}
}

cpp-ipc

项目名称: cpp-ipc

状态: 已发布

需要的C++版本: C++14(msvc&gcc&clang), 推荐支持C++17的编译器

项目简介:

使用共享内存的跨平台(Linux/Windows,x86/x64/ARM)高性能IPC通讯库。

code first:

std::vector<charconst *> const datas = {
"hello!",
"foo",
"bar",
"ISO/IEC",
"14882:2011",
"ISO/IEC 14882:2017 Information technology - Programming languages - C++",
"ISO/IEC 14882:2020",
"Modern C++ Design: Generic Programming and Design Patterns Applied"
};
// thread producer
std::thread t1 {[&] {
ipc::route cc { "my-ipc-route" };
// waiting for connection
cc.wait_for_recv(1);
// sending datasfor (auto str : datas) cc.send(str);
// quit
cc.send(ipc::buff_t('\0'));
}};
// thread consumer
std::thread t2 {[&] {
ipc::route cc { "my-ipc-route", ipc::receiver };
while (1) {
auto buf = cc.recv();
auto str = static_cast<char*>(buf.data());
if (str == nullptr || str[0] == '\0') return;
std::printf("recv: %s\n", str);
}
}};
t1.join();
t2.join();

luatinkerE

项目名称:luatinkerE

状态:已发布

需要的C++版本:主版本C++11 或 C++17分支

项目简介:

LUA-C++ 绑定库"lua_tinker" 扩展为支持 c++11/14/17各种新特性 和lua 5.3

code first:

//c++bindlua_tinker::def("func_name", &func);
lua_tinker::set("var_name", &var);
lua_tinker::class_add<class_t>("class_name");
lua_tinker::class_def<class_t>("func_name", &class_t::func);
lua_tinker::class_mem_readonly<class_t>("member_name", &class_t::member);
lua_tinker::class_mem_static<class_t>("member_name", &class_t::member);
lua_tinker::class_property<ff>(L, "m_prop", &ff::getVal, &ff::setVal);
lua_tinker::class_property<ff>(L, "m_prop_readonly", &ff::getVal, nullptr);
lua_tinker::class_inh<ff, ff_base>(L);
lua_tinker::def(L, "test_overload", lua_tinker::args_type_overload_functor(
lua_tinker::make_functor_ptr((int(*)(int))(&test_overload)),
lua_tinker::make_functor_ptr((int(*)(double))(&test_overload)),
lua_tinker::make_functor_ptr((int(*)(int, double))(&test_overload)),
lua_tinker::make_functor_ptr((int(*)(int, int, double))(&test_overload))));
//call luaret_val_t ret = lua_tinker::call<ret_val_t>("func_name", param1, param2);
var_t var = lua_tinker::get<var_t>("var_name");
std::function<int(int, int)> func = [](int k, int j)->int {	return k + j; };
lua_tinker::def(L, "std_function_int_int", func);	//can hold function
lua_tinker::lua_function_ref<int> lua_func = lua_tinker::call<decltype(lua_func)>(L, "test_lua_luafunction");

ScriptX

项目名称:ScriptX

状态:已发布

需要的C++版本:C++17

项目简介:

ScriptX是一个脚本引擎抽象层。对下封装多种脚本引擎,对上暴露统一的API,使得上层调用者可以完全隔离底层的引擎实现(后端)。

ScriptX不仅隔离了几种JavaScript引擎,甚至可以隔离不同脚本语言,使得上层仅需修改一个编译选项即可无缝切换脚本引擎和脚本语言。

ScriptX的术语中,"前端"指对外的C++ API,"后端"则指不同的底层引擎,目前已经实现的后端有:V8, node.js, JavaScriptCore, WebAssembly, Lua.

code first:

EngineScope enter(engine);
try {
engine->eval("function fibo(x) { if (x<=2 ) return 1; else return fibo(x-1) + fibo(x-2) }");
Local<Function> fibo = engine->get("fibo").asFunction();
Local<Value> ret = fibo.call({}, 10);
ret.asNumber().toInt32() == 55;
// or use: Function::newFunction(std::puts);
engine->set("log", Function::newFunction(
[](const std::string& msg) {
std::cerr << "[log]: " << msg << std::endl;
}));
engine->eval("log('hello world');");
auto info = json.get("info").asObject();
info.get("version").asString().toString() == "1.18";
info.get("time").asNumber().toInt32() == 132;
Local<Object> bind = engine->eval("...").asObject();
MyBind* ptr = engine->getNativeInstance<MyBind>(bind);
ptr->callCppFunction();
} catch (Exception& e) {
FAIL() << e.message() << e.stacktrace();
// or FAIL() << e;
}
  1. 使用 EngineScope 进入引擎环境
  2. 绝大多是API可以接受C++原生类型作为参数,内部自动转换类型
  3. 可以从C/C++函数直接创建脚本函数(native 绑定)
  4. 支持脚本的异常处理
  5. API强类型

async

项目名称:async

状态:已发布

需要的C++版本:C++11

项目简介: async的目标是为异步代码的“同步编写”提供一个解决方案。其中内置了一些项目中常用的io接口实现, 比如:mysql,curl,mongo,redis以及基于zeromq而实现的服务端进程间通信。简单易用

支持跨平台(linux/windwos)

code first:

// 下面代码的输出结果是: promise begin 异步执行结束 promise over:0

voidpromise_test() {
// 起一个协程任务,回调将在协程里运行CoroutineTask::doTask([](void*){
printf("promise begin\n");
auto ret = co_async::promise([](co_async::Resolve resolve, co_async::Reject reject) {
// 两秒后执行下面的回调co_async::setTimeout([resolve]() {
printf("异步执行结束\n");
// 报告promise异步执行结束,并传递结果集,这里传nullptrresolve(nullptr);
}, 2*1000);
});
// promise返回,往下继续走printf("promise over:%d\n", ret.first);
}, 0);
}

About

purecpp opensource projects list

Resources

Stars

95 stars

Watchers

18 watching

Forks

Releases

Packages

Contributors