yaLanTingLibs
coro_rpc::coro_rpc_server类 参考

#include <coro_rpc_doc.hpp>

Public 成员函数

 coro_rpc_server (size_t thread_num, unsigned short port, size_t conn_timeout_seconds=0)
 
async_simple::coro::Lazy< coro_rpc::err_code > async_start () noexcept
 
coro_rpc::err_code start ()
 
void stop ()
 
uint16_t port ()
 
auto & get_executor ()
 
template<auto first, auto... func>
void register_handler ()
 
template<auto first, auto... func>
void register_handler (util::class_type_t< decltype(first)> *self)
 

详细描述

RPC Server 服务端使用示例

{c++}
#include <ylt/coro_rpc/coro_rpc_server.hpp>
using namespace ylt::coro_rpc;
inline std::string hello_coro_rpc() { return "hello coro_rpc"; }
int main(){
coro_rpc_server server(std::thread::hardware_concurrency(), 9000);
server.register_handler<hello_coro_rpc>();
server.start();
}
coro_rpc_server(size_t thread_num, unsigned short port, size_t conn_timeout_seconds=0)

构造及析构函数说明

◆ coro_rpc_server()

coro_rpc::coro_rpc_server::coro_rpc_server ( size_t  thread_num,
unsigned short  port,
size_t  conn_timeout_seconds = 0 
)

构造coro_rpc_server,需要传入线程数、端口和连接超时时间。服务端会根据线程数启动 io_context以充分利用多核的能力。 服务端在启动的时候会监听该端口 如果conn_timeout_seconds大于0的时候,服务端会启动心跳检查,默认不开启。 当超过conn_timeout_seconds时间内没有收到来自客户端的消息时,服务端会主动关闭客户端连接。

参数
thread_num
port
conn_timeout_seconds

成员函数说明

◆ async_start()

async_simple::coro::Lazy<coro_rpc::err_code> coro_rpc::coro_rpc_server::async_start ( )
noexcept

启动server(协程),server启动后会监听端口等待连接到来,如果端口被占用会返回错误码; 如果accept失败也会返回错误码;客户端连接到来之后启动会话。

返回
正常启动返回空,否则返回错误码

◆ get_executor()

auto& coro_rpc::coro_rpc_server::get_executor ( )

获取内部的调度器

返回

◆ port()

uint16_t coro_rpc::coro_rpc_server::port ( )

获取监听的端口

返回
端口号

◆ register_handler() [1/2]

template<auto first, auto... func>
void coro_rpc::coro_rpc_server::register_handler ( )

注册rpc服务函数(非成员函数),服务端启动之前需要先注册rpc服务函数以对外提供rpc服务。 在模版参数中填入函数地址即可完成注册,如果注册的函数重复的话,程序会终止退出。

函数注册示例

{c++}
// RPC函数(普通函数)
void hello() {}
std::string get_str() { return ""; }
int add(int a, int b) {return a + b; }
// RPC函数(成员函数)
class test_class {
public:
void plus_one(int val) {}
std::string get_str(std::string str) { return str; }
};
int main() {
server.register_handler<hello>(); //一次注册一个RPC函数
server.register_handler<get_str, add>(); //一次注册多个RPC函数
test_class obj{};
server.register_handler<&test_class::plus_one,
&test_class::get_str>(&obj);//注册成员函数
}
模板参数
first需要注册的非成员函数,至少注册一个,允许同时注册多个
func

◆ register_handler() [2/2]

template<auto first, auto... func>
void coro_rpc::coro_rpc_server::register_handler ( util::class_type_t< decltype(first)> *  self)

注册rpc服务函数(成员函数),服务端启动之前需要先注册rpc服务函数以对外提供rpc服务。 在模版参数中填入成员函数地址即可完成注册,如果注册的函数重复的话,程序会终止退出; 如果成员函数对应的对象指针为空程序会终止退出。

模板参数
first需要注册的成员函数,至少注册一个,允许同时注册多个
func
参数
self成员函数对应的对象指针

◆ start()

coro_rpc::err_code coro_rpc::coro_rpc_server::start ( )

阻塞方式启动server, 如果端口被占用将会返回非空的错误码

返回
正常启动返回空,否则返回错误码

◆ stop()

void coro_rpc::coro_rpc_server::stop ( )

停止server,阻塞等待直到server停止;


该类的文档由以下文件生成: