nghttp2 - HTTP/2 C Library 简明教程(一)

nghttp2 - HTTP/2 C Library

nghttp2 是在C中的超文本传输协议版本2的实现. HTTP/2 的框架层被实现为可重用的C库. 最重要的是我们实现了一个HTTP/2客户端,服务器和代理.还为HTTP/2开发了负载测试和基准测试工具. HPACK编码器和解码器可用作公共API。 还有一个实验性的高级C++库. 我们有这个库的Python绑定,但是我们还没有完整的代码覆盖.

发展情况

为HTTP/2实现了RFC 7540 HTTP/2和RFC 7541 HPACK-头部压缩. nghttp2的代码库是从 spdylay中分出来的. (https://github.com/tatsuhiro-t/spdylay) project.

公共测试服务器

以下端点可用来测试nghttp2的实现.

  • https://nghttp2.org/ (TLS + ALPN/NPN) 此端点通过ALPN/NPN支持h2,h2-16,h2-14,和http/1.1,并且需要HTTP/2连接的TLSv1.2.
  • http://nghttp2.org/ (HTTP Upgrade and HTTP/2 Direct) h2c and http/1.1

编码风格

我们使用clang-format来统一格式化源代码.clang-format的配置文件.clang-format位于根目录下. 由于clang-format在版本之间产生稍微不同的结果,我们目前使用clang-format-5.0 .

为了检测任何违反编码风格的行为,我们建议设置git pre-commit hook来检查你更改的编码风格.pre-commit文件位于更目录. 将其复制到.git/hooks下,并确保是可执行文件. pre-commit 脚本使用clang-format-diff.py来检测任何样式错误. 如果它不在你的PATH中, 或者他以不同的名字存在(如debian中的clang-format-diff-5.0),可以将它添加到 PATH变量中,或者添加git选项clangformatdiff.binary来指向脚本.

针对emacs用户,将clang-format集合到emacs是非常容易的. clang-format.el应该与clang分发, 如果没有发现,请从这里下载,并将这些行添加到你的.emacs文件.

;; From
;; https://code.google.com/p/chromium/wiki/Emacs#Use_Google's_C++_style!
(load "/<path/to>/clang-format.el")
(add-hook 'c-mode-common-hook
     (function (lambda () (local-set-key (kbd "TAB")
                                         'clang-format-region))))

你可以找到其他的编辑器集成. http://clang.llvm.org/docs/ClangFormat.html.

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏张善友的专栏

ASP.NET Web API 处理架构

这篇文章主要是介绍ASP.NET Web API的处理架构:当一个HTTP请求到达直到产生一个请求的过程。ASP.NET Web API 的处理架构图如下,主要...

31680
来自专栏一名合格java开发的自我修养

javaOOM该分析dump文件而不是看异常log日志原因

应用程序出现OOM异常,你是否仍然通过看日志的方式去排查问题(该方式定位解决问题是大概率的巧合而已)?正确的排查方案是进行dump文件分析,你知道为什么吗?

55240
来自专栏专注于主流技术和业务

axios2教程

axios 是一个基于 promise 的 HTTP 库,用于浏览器和node.js的http客户端,支持拦截请求和响应,自动转换 JSON 数据, 客户端支持...

1.3K30
来自专栏JetpropelledSnake

Python入门之logging日志模块以及多进程日志

本篇文章主要对 python logging 的介绍加深理解。更主要是 讨论在多进程环境下如何使用logging 来输出日志, 如何安全地切分日志文件。 1. ...

1.2K70
来自专栏大内老A

《WCF服务编程》关于“队列服务”一个值得商榷的地方

今天写《WCF技术剖析(卷2)》关于“队列服务”部分,看了《WCF服务编程》相关的内容。里面介绍一个关于“终结点不能共享相同的消息队列”说法,个人觉得这值得商榷...

21170
来自专栏FreeBuf

Wolf CMS 新旧两个版本中的文件上传漏洞分析

一、Wolfcms简介 Wolf CMS是一款内容管理系统(CMS),是在GNUGeneral Public License v3下发布的免费软件。Wolf C...

40450
来自专栏cloudskyme

C++动态链接库

动态链接库 动态链接库英文为DLL,是Dynamic Link Library 的缩写形式,DLL 是一个包含可由多个程序同时使用的代码和数据的库,DLL不是可...

59250
来自专栏非著名程序员

10款你可能不知道的Android开发辅助工具

1、XAppDbg XAppDbg是一个可以在运行中改变代码中参数的一个应用开发工具。这个工具可以为你省下大量的时间,因为你不用为应用的每次小改变而重新编译运...

24660
来自专栏散尽浮华

DNS之BIND使用小结(Forward转发)

之前详细介绍了DNS及其在linux下的部署过程,今天再说下DNS的BIND高级特性-forwarder转发功能。比如下面一个案例: 1)已经在测试环境下部署了...

1.1K30
来自专栏Elson's web

webpack4实用配置指南-上手篇

算起来已经有3到4个项目的webpack构建打包经历。然而每次搭建起来还是有新手既视感,比较捉急。工具用法的东西,好记性不如烂笔头,有必要系统梳理下webpac...

2.6K160

扫码关注云+社区

领取腾讯云代金券