For the complete documentation index, see llms.txt. This page is also available as Markdown.

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?