新超级马里奥wii编辑器

I’m delighted to announce that today is the release date of version 1.0.0 of my brand new project, Hyper-h2. Hyper-h2 is the first step in what I hope will be a long journey improving the state of HTTP in Python, by providing a set of composable, re-usable libraries that can act as tools for building bigger and better HTTP projects. If you want to check it out, jump straight to the docs. Otherwise, I’d like to talk a little bit about how I got here, and about the brand-new Hyper Project that I’m going to be working on for the foreseeable future.

我很高兴地宣布,今天是我的全新项目Hyper-h2 1.0.0版的发布日期。 我希望Hyper-h2的第一步是通过提供一组可组合且可重用的库来改善Python在HTTP中的状态,这可作为构建更大更好的HTTP项目的工具。 如果您想检查一下,请直接跳至docs 。 否则,我想谈谈我如何到达这里,以及在可预见的未来将要致力于的全新Hyper项目。

过去 (The Past)

It’s a little mind-boggling to realise that I first emailed Mark Nottingham to ask about adding my original Hyper project to the list of HTTP/2 draft implementations in February of 2014. That decision has led me down a bit of an unexpected path, including a working relationship with the IETF HTTPBis working group and several conference talks, including one at The Big PyCon in Montreal. Altogether, it’s been a bit of a ride.

意识到我于2014年2月首先向Mark Nottingham发送电子邮件询问我是否将原始Hyper项目添加到HTTP / 2草案实现列表中,这有点令人难以置信。我的这一决定使我走了一条意外的道路,包括与IETF HTTPBis工作组的工作关系和几次会议演讲,包括在蒙特利尔的The Big PyCon上进行的一次会议。 总的来说,这是一个旅程。

For the past nine months or so, however, I’ve been dissatisfied with the shape of the Hyper project. It suffered from some limitations that were the result of design decisions I fundamentally believe are backward-looking. It was also fairly monolithic, and contained a lot of code that might be more generally useful in the Python community. However, its greatest problem was that it was alone.

但是,在过去的九个月左右的时间里,我对Hyper项目的形式不满意。 我遭受了一些限制,这些限制是我从根本上认为是后向的设计决策的结果。 它也是相当整体的,并且包含许多在Python社区中可能更有用的代码。 但是,最大的问题是它一个人呆着。

Despite the fact that HTTP/2 has been being drafted for more than two years, and that it’s been a full standard since May, Python has basically had only one HTTP/2 implementation, and it was a synchronous client. Additionally, there was really no effort afoot that I could see to write any other implementation in Python. As far as I could tell, no-one cared.

尽管HTTP / 2已经起草了两年多,并且自5月以来已经成为一个完整的标准,但是Python基本上只有一个HTTP / 2实现,并且它是一个同步客户端。 此外,我几乎没有任何努力可以看到用Python编写任何其他实现。 据我所知,没有人关心。

This seems unacceptable to me. Python is potentially a fantastic language to work with HTTP/2 in. Python is especially well-suited to investigate the potential use of HTTP/2 as an RPC mechanism (where GRPC) is an example of one possible approach.

这在我看来是不可接受的。 Python可能是与HTTP / 2一起使用的一种奇妙的语言。Python特别适合研究将HTTP / 2作为RPC机制的潜在用途(其中GRPC )是一种可能方法的示例。

However, I can’t write all the possible HTTP/2 implementations in Python. I’m just one person. Nor should I: there are lots of great HTTP-using tools in Python, and I’m not interested in trying to replace or obsolete them. Instead, I’d like to improve them.

但是,我无法用Python编写所有可能的HTTP / 2实现。 我只是一个人。 我也不应该:Python中有很多很棒的HTTP使用工具,而且我对尝试替换或淘汰它们不感兴趣。 相反,我想改进它们。

With this in mind, I set out to build the Hyper Project.

考虑到这一点,我着手构建超级项目。

超级项目 (The Hyper Project)

It seemed to me that the problem was that HTTP/2 is complex. It has a framing layer, a compression layer, a protocol stack, a priority tree, and all other kinds of weirdness that implementations would have to write from scratch. This is hard, and lots of developers simply didn’t have the time or inclination to do that work from nothing. What these developers need is a toolkit.

在我看来,问题在于HTTP / 2很复杂。 它具有一个框架层,一个压缩层,一个协议栈,一个优先级树,以及实现必须从头开始编写的所有其他种类的怪异。 这很困难,许多开发人员根本没有时间或意愿无所事事地完成这项工作。 这些开发人员需要的是一个工具箱。

(As an aside, this problem applies in the rest of the OSS world as well. Younghttp2. For example,

( 顺便说一句 ,这个问题也适用于OSS的其他领域。您使用nghttp2 。例如,

When you want to bring HTTP/2 to your platform or project, you don’t want to have to implement all of that stuff. Some of it isn’t too hard but just a fair lot of work (e.g. framing), while some of it is fiddly and prone to subtle bugs. Regardless, it would make your life easier if you were able to pick up one or more ready-made, off-the-shelf implementations that you can simply plumb into your project however you see fit.

当您想将HTTP / 2引入您的平台或项目时,您不需要实现所有这些东西。 其中一些并不太难,但仅需大量工作(例如框架),而另一些则很容易产生细微的错误。 无论如何,如果您能够选择一个或多个现成的现成实现,您可以将它们简单地放入项目中,只要您认为合适就可以使您的生活变得更轻松。

Enter the Hyper Project. The goal of this project is to provide a collection of tools for building HTTP/1.1 and HTTP/2 implementations. Each of these tools will be targetted at the broadest possible use-case, and will compose together to allow you to build complete HTTP/2 implementations. They will also function well on their own: this means that people who need something unusual or different in one small aspect of their implementation can use the standard bits every where else, and only hand-code the bits that they do differently to everyone else.

输入超级项目。 该项目的目的是提供用于构建HTTP / 1.1和HTTP / 2实现的工具集合。 这些工具中的每一个都将针对尽可能广泛的用例,并将它们组合在一起以允许您构建完整的HTTP / 2实现。 它们也将独立运行良好:这意味着在实现的一小部分中需要一些不同寻常或不同之处的人们可以在其他任何地方使用标准位,并且只对与众不同的位进行手工编码。

There is really no reason to spread our work across a number of different software projects, all reinventing the same wheel in subtly different ways. It should be possible for most of the Python world to build on the same set of common code, differing only where we need to in order to express our different goals and opinions.

确实没有理由将我们的工作分散到多个不同的软件项目中,而所有项目都以不同的方式重新发明了同一个轮子。 对于大多数Python世界而言,应该有可能建立在相同的通用代码集上,只是为了表达不同的目标和观点而在我们需要的地方有所不同。

Excitingly, this isn’t just a pipe dream for me: the Hyper Project exists, right now. You can find it at the project website, which also hosts documentation for the inaugural set of sub-projects. At the moment, these include a HTTP/2 framing layer (hyperframe) and a pure-Python HPACK implementation (hpack), necessary building blocks of any HTTP/2 implementation. Both of these were ripped out of the original Hyper code and made general enough to be used elsewhere, and installed by themselves. It also contains a CFFI-based wrapper to the Brotli compression algorithm reference implementation (brotlipy), as proof that the Hyper Project is about HTTP in general, and not just HTTP/2.

令人兴奋的是,这对我来说不是一个空想:超级项目现在存在。 您可以在项目网站上找到它, 该网站还托管了第一批子项目的文档。 目前,这些功能包括HTTP / 2框架层( hyperframe )和纯Python HPACK实现( hpack ),这是任何HTTP / 2实现的必要组成部分。 这些都从原始的Hyper代码中剥离出来,并使其通用到足以在其他地方使用,并自行安装。 它还包含Brotli压缩算法参考实现 ( brotlipy )的基于CFFI的包装,以证明Hyper Project通常与HTTP有关,而不仅仅是HTTP / 2。

超级H2 (Hyper-h2)

The crowning jewel of the current Hyper Project, however, is the fact that it contains a general, pure-Python HTTP/2 stack, called Hyper-h2. This stack has a lofty aim: to be the base layer for the vast majority of Python HTTP/2 implementations. To that end, it has a number of unusual features that are worth explaining.

但是,当前Hyper Project的最大亮点是它包含一个称为Hyper-h2的通用纯Python HTTP / 2堆栈。 该堆栈有一个崇高的目标:成为绝大多数Python HTTP / 2实现的基础层。 为此,它具有许多不寻常的功能,值得解释。

Firstly, and most notably, Hyper-h2 does absolutely no I/O. It exists entirely in memory, reading to and writing from in-memory buffers. The reason for this is that it becomes possible to use this same kernel of code in any programming paradigm. If you like synchronous code, that’ll work. If you like threads, that’ll work too. If you like gevent, that’s fine. Twisted? Check. Tornado? All good. asyncio? You bet. All you need to do is write the bit around the outside that does the boring stuff of reading from and writing to sockets. Pass the data into hyper-h2, and it’ll parse it and turn it into something you can actually work with.

首先,最值得注意的是,Hyper-h2绝对不执行任何I / O。 它完全存在于内存中,可以在内存中进行读写。 这样做的原因是,可以在任何编程范例中使用相同的代码内核。 如果您喜欢同步代码,那将起作用。 如果您喜欢线程,那也可以。 如果您喜欢gevent,那很好。 扭曲了吗? 检查一下 龙卷风? 都好。 异步? 你打赌 您需要做的就是在外部写一些位,以进行无聊的套接字读取和写入操作。 将数据传递到hyper-h2中,它将对其进行解析并将其转换为可以实际使用的东西。

That’s the next notable thing about Hyper-h2: it’s not a complete implementation, like Apache or curl. Instead, it’s intended to be a core part of your implementation. Hyper-h2 lets you decide what you want to do on the connection, and tells you what the other side did, but it doesn’t know everything there is to know about your HTTP/2 application. This means it’s not a client, or a server: it’s a tool for writing clients and servers. Hyper-h2 enforces the HTTP/2 state machine, manages settings and compression, serializing and deserializing, and stream management: but it doesn’t do anything about requests and responses. That’s up to you: to decide what works best for you.

这是关于Hyper-h2的下一件值得注意的事情:它不是一个完整的实现,例如Apache或curl。 相反,它打算成为实现的核心部分。 Hyper-h2允许您决定要在连接上执行的操作,并告诉您另一端做了什么,但是它不知道有关HTTP / 2应用程序的所有信息。 这意味着它不是客户端,也不是服务器:它是用于编写客户端和服务器的工具。 Hyper-h2强制执行HTTP / 2状态机,管理设置和压缩,序列化和反序列化以及流管理:但是它对请求和响应没有任何作用。 这取决于您:确定最适合您的方法。

This flexibility means that Hyper-h2 can be used as the base for any number of projects. If you want HTTP/2 in aiohttp, Hyper-h2 could be used there. Twisted? Same deal. And if you want to do something more specialised, embedding HTTP/2 directly in your application, you can do that with Hyper-h2 as well.

这种灵活性意味着Hyper-h2可以用作许多项目的基础。 如果要在aiohttp中使用HTTP / 2, aiohttp可以在aiohttp Hyper-h2。 扭曲了吗? 同样的交易。 而且,如果您想做更专业的事情,直接将HTTP / 2嵌入到您的应用程序中,那么您也可以使用Hyper-h2。

Hyper-h2 aims to be general enough that the majority of projects could use it without adjustment, but specific enough that it manages to be useful. Thus, some use-cases are likely to remain out of scope for it. For example, it will almost certainly confine itself to strictly enforcing the HTTP/2 state machine: this means that it may not be a good choice for implementations that occasionally need to violate that state machine.

Hyper-h2的目标是具有足够的通用性,以便大多数项目无需调整即可使用它,但又要足够具体,以使其有用。 因此,某些用例可能超出其范围。 例如,它几乎肯定会局限于严格执行HTTP / 2状态机:这意味着对于偶尔需要违反该状态机的实现,它可能不是一个好的选择。

成功 (Success)

So, what does success look like for the Hyper project? The goal is for other projects to save time by building on top of our work, and from that perspective we’re already well on the way. hpack has already been packaged by Debian (and so by extension Ubuntu), Arch, and Kali. This is because hpack has been adopted by netlib, the networking library for the awesome mitmproxy project. Hyperframe appears to be on the way to being a part of netlib as well, which suggests it’ll be next on the list.

那么,Hyper项目的成功是什么样的呢? 目标是其他项目通过在我们的工作之上进行构建来节省时间,从这个角度来看,我们已经步入正轨。 hpack已由Debian (扩展名为Ubuntu ), Arch和Kali打包。 这是因为hpack已被netlib采纳, netlib是很棒的mitmproxy项目的网络库。 超帧似乎也正在成为netlib的一部分,这表明它将排在清单的第二位。

From my perspective, this is already a success: we’ve saved a great project some time and effort in their implementation. But we can do more.

从我的角度来看,这已经是成功的:我们在实施这些项目时节省了一些时间和精力。 但是我们可以做更多。

In the next few months I plan to start pushing forward with Hyper-h2. I aim to add HTTP/2 support to Twisted. I am also going to start accepting offers from other projects that would like help adding HTTP/2 to their list of features by using Hyper-h2, or by using hpack or hyperframe directly. I intend to add even more projects to the Hyper umbrella: an interesting next target would be a library that implements the fiendishly complex HTTP/2 priority scheme.

在接下来的几个月中,我计划开始推动Hyper-h2的发展。 我旨在为Twisted添加HTTP / 2支持。 我还将开始接受其他项目的报价,这些项目希望通过使用Hyper-h2或直接使用hpack或hyperframe将HTTP / 2添加到其功能列表中。 我打算将更多项目添加到Hyper伞中:一个有趣的下一个目标是实现了异常复杂的HTTP / 2优先级方案的库。

Additionally, I plan to rip the heart out of the old Hyper implementation and replace it with Hyper-h2. When I do so, I’ll bring that library under the umbrella of the Hyper Project as well, which will fix this slightly tricky naming problem we have with two different things called “hyper”.

此外,我计划从旧的Hyper实施中脱颖而出,并用Hyper-h2代替它。 当我这样做时,我还将把该库也放在Hyper Project的保护下,这将解决我们用两个不同的东西“ hyper”遇到的这个棘手的命名问题。

翻译自: https://www.pybloggers.com/2015/10/the-new-hyper/

新超级马里奥wii编辑器

新超级马里奥wii编辑器_新超级相关推荐

  1. 超级玛丽马里奥版下载_将超级马里奥赋予生命

    超级玛丽马里奥版下载 Have you ever seen a zoetrope? If today's sophisticated computer animation is the latest ...

  2. 新酷卡 mysql接口_新酷卡M池二次开发模块数据库操作版

    有大神发了一个soket方式的,尝试继承到模块后发现soket不太适合放到易模块类内, 客户组件不支持放在类内,必须放在界面上,传入赋值类内客户变量,收到数据事件也没办法放在类内,放弃 远程服务支持库 ...

  3. 12333新农合网上查询_新农合医保查询缴费平台|新农村医疗保险网上缴费平台

    这个智慧新农合新农合患者就诊从挂号到缴费,不用再拿着各种票据在报销处和收费处之间奔走,也不用担心票据不完整造成无法正常报销的情况,只需携带本人有效身份证和农合本,凭身份证号码或新农合号码即可实时报销所 ...

  4. python与新媒体专业就业前景_新媒体行业的发展前景如何?

    当初零基础转行新媒体行业前的我,首先关注的也是发展前景的问题. (ps:关于新媒体行业,我有准备了一些干货资料,大家可以在文末领取哦) 我和新媒体行业的结缘 从事服装设计3年的我,因为服装行业发展前景 ...

  5. php编辑器_新PHP编辑器

    php编辑器 WHO? (Who?) September 30th marked the stepping down of Timothy Boronczyk, Phpmaster's long ti ...

  6. 新电脑怎么分盘_新买的笔记本电脑收货后,该如何验机?

    买了一台新电脑,肯定要先验货才行,那么笔记本到手之后,该做些什么?该检查什么?对于萌新来说,这还真是个麻烦,经常有人问,我新买的电脑到了,该注意些什么问题之类的,那么今天就给大家分享一下我的看法. 验 ...

  7. 教师新学年工作愿景_新学年的3个创新开源项目

    教师新学年工作愿景 我在2013年秋天首次写了关于教育者的开源学习软件.五年过去了,如今,开源软件和原理已经从教育界的外来者转移到了大众. 由于Penn Manor学区采用开放软件并建立了建立在信任基 ...

  8. 新浪云python示例_新浪SAE部署python项目

    SAE实际上就是个多节点的虚拟主机,跟云主机差不多,只不过SAE的节点比一般的云主机要多,把网站程序布署在SAE上比自己用独立的服务器稳定性和性能要高很多.将自己用python开发的博客项目放在SAE ...

  9. 新唐单片机选型手册_新唐单片机选型手册_新唐8051标准系列单片机选型指南

    新唐8051标准系列单片机选型指南 新唐单片机 8位单片机 作者: 来源: 发布时间:2019-06-18 22:15:07   浏览:351 新唐科技标准8051产品系列,其管脚兼容于传统12T 8 ...

最新文章

  1. SaltStack 学习笔记 - 第十一篇: SaltStack 文件操作
  2. Python天天美味(5) - ljust rjust center
  3. 创建web服务器||HTTP协议的概念||报文||HTTP请求与响应处理——未完待续
  4. 小程序动态设置style,使用内部数据
  5. java设计模式face_24种设计模式--门面模式【Facede Pattern】
  6. C++八皇后拼图,打印所有的算法(附完整源码)
  7. springboot微服务 java b2b2c电子商务系统(一)服务的注册与发现(Eureka)
  8. 信息学奥赛一本通(2056:【例3.7】最大的数)
  9. um是代表什么意思_白玫瑰代表什么意思 居然有这么多含义
  10. cn域名注册国外_国内注册域名有什么规则?有什么要求?
  11. 华为olt ma5680t常用命令详解
  12. wsl使用ssh连接
  13. 项目管理之WBS工作分解结构法
  14. 用友U8去除凭证外部凭证标记
  15. 【论文阅读】强化学习-Transfer and Multitask RL专题8篇
  16. 谓词函数和谓词函数对象_称为形容词的函数
  17. Android笔记:自定义锁屏
  18. html中写模态框,Html 模态框操作
  19. Android Studio生成.jks文件
  20. 51单片机 蜂鸣器播放提示音

热门文章

  1. ArrayList 复制
  2. 根据创建的School类创建两个学校对象,为对象属性赋值,并调用相应方法。
  3. hadoop2.3.0错误之Configured Capacity: 0 (0 B)Present Capacity: 0 (0 B) DFS Remaining: 0 (0 B) DFS Used:
  4. SAP-MM-PA精解分析系列之基本介绍(02) -组织架构
  5. oracle 完整移库
  6. 搜刮的好东西:网站运营管理策划书模版
  7. 【方向盘】升级到IDEA 2022.1版本后,我把Maven Helper卸载了
  8. 19岁天才少年纯手工自制CPU,直呼NB
  9. android异常:dialog窗口句柄泄露
  10. 天嵌科技——充电桩模块介绍