HTTP2 支持

Tars 使用nghttp2 库支持了 http2 协议,对协议库做了 RPC 封装,使得对业务开发几乎透明,用起来非常方便。由于复用了 Tars rpc,因此也拥有了同步和异步以及超时的特性,并能够利用 tars stat 上报调用质量。

本文简单介绍一下使用 http2 的方法和步骤,包括同步调用和异步调用, 实例代码参见 tarscpp/example/HttpDemo。

注意 tarscpp>=2.3 版本后接口变更成最新的了, 不在兼容老版本!并保持和 http1 接口一致性

http2 开启

只需要按照下面几个步骤设置:

编译 tars 框架,支持 nghttp2

tars 框架默认不开启 http2,开启 HTTP2:

cmake .. -DTARS_HTTP2=ON

重新编译 tarscpp.

http2 server 实现

see demo: cpp/example/HttpDemo/Http2Server

自定义协议, 采用 http2

void HttpServer::initialize()
{
    addServant<Http2Imp>(ServerConfig::Application + "." + ServerConfig::ServerName + ".Http2Obj");
    addServantProtocol(ServerConfig::Application + "." + ServerConfig::ServerName + ".Http2Obj", &parseHttp2);
}

协议解析器函数, 注意, 每个连接创建和保存一个 TC_Http2Server, 作为 http2 的 session 控制器

服务实现中, 根据连接 id 获取到 http2 的 session(TC_Http2Server 对象) 并解析协议, 回包即可

http rpc 的使用

只需要按照下面几个步骤设置:

编译 tars 框架,支持 nghttp2

tars 框架默认不开启 http2,开启 HTTP2:

获取客户端代理,设置 http2 编解码函数

发起同步调用

注意: 这里 http_call 第一个参数没有实际涵义, 只是用来监控用, 即在 web 管理平台接口统计看到函数名是"hello"

发起异步调用

注意: 这里 http_call_async 第一个参数没有实际涵义, 只是用来监控用, 即在 web 管理平台接口统计看到函数名是"hello"

Last updated

Was this helpful?