twisted是什么梗_Twisted是什么

2023-05-30 14:24:08 来源:互联网

Twisted是用Python实现的事件驱动的网络引擎框架。Twisted诞生于2000年初。在当时的网游开发者看来,无论使用哪种语言,能够兼顾扩展性和跨平台性的网络库都很少。

扭曲作者试图在当时的现有环境下开发游戏,难度很大。他们迫切需要一个高度可伸缩的、事件驱动的、跨平台的网络开发框架,所以他们决定自己实现一个。

并向之前的游戏和web应用的开发者学习,借鉴他们的经验和教训。


(资料图片)

Twisted支持许多常见的传输和应用层协议,包括TCP、UDP、SSL/TLS、HTTP、IMAP、SSH、IRC和FTP。就像Python一样,

Twisted还具有“自带电池”的特性。Twisted对它支持的所有协议都有客户机和服务器实现,并附带了基于命令行的工具。

它使得配置和部署产品级Twisted应用程序变得非常方便。

一、为什么需要 Twisted

2000年,《扭曲的现实》的作者Glyph正在开发一款名为《扭曲的现实》的基于文本的多人在线游戏。这个游戏是用Java开发的。

它充满了线程——,每个连接有三个线程要处理。处理输入的线程将在读操作时阻塞,处理输出的线程将在一些写操作时阻塞,并且“逻辑”线程将在等待计时器超时或事件排队时休眠。

随着玩家在虚拟世界中的移动和交互,线程被死锁,缓存被污染。程序中的加锁逻辑对于——几乎从不使用多线程,使得整个软件复杂,漏洞百出,极难扩展。

为了寻找其他解决方案,作者发现了Python。

特别是Python中的select模块,用来复用socket和pipe等流对象的I/O(UNIX规范第三版(SUSv3)描述了select)。那时,

Java不提供操作系统的选择接口或任何其他异步I/O API (java.nio,一个用于非阻塞I/O的包,被添加到J2SE 1.4并于2002年发布)。

通过使用Python中的select模块快速构建游戏原型,快速降低程序复杂度,比多线程版本更可靠。

Glyph很快转向Python、select和事件驱动编程。他用Python的select模块来编写游戏的客户端和服务器。但他想要的不止这些。从根本上说,

他希望将网络行为转化为对游戏中对象的方法调用。如果你能在游戏中收到邮件,

像Nethack mailer这样的守护程序?如果游戏中每个玩家都有主页会怎样?Glyph发现他需要优秀的HTTP客户端和服务器的IMAP和Python实现。

而这些都得用select。

他首先求助于Medusa,这是一个在20世纪90年代中期开发的平台,Python中的asyncore模块可用于编写web服务。Asyncore是一个异步处理套接字的模块。

调度程序和回调接口建立在操作系统的选择API上。

这对Glyph来说是一个令人兴奋的发现,但是美杜莎有两个缺点:

这个项目在2001年不再维持,glyph开发了扭曲现实。Asyncore只是socket的一个很薄的封装层。

应用程序编写人员仍然需要直接操作套接字。这意味着程序可移植性的负担仍然落在程序员自己身上。另外,asyncore对Windows的支持在当时还是有问题的。

Glyph希望在Windows上运行带有图形用户界面的客户端。Glyph需要自己实现一个网络引擎平台,他意识到扭曲的现实打开了问题的大门。

这和他的游戏一样有趣。

久而久之,游戏《扭曲的现实》就演变成了一个扭曲的网络引擎平台。它可以做到Python中现有的网络平台当时做不到的事情:

使用事件驱动的编程模型,而不是多线程模型。跨平台:为主流操作系统平台公开的事件通知系统提供统一的接口。“内置电池”能力:提供流行的应用层协议实现,因此Twisted可以立即被开发者使用。

符合RFC 规范,已经通过健壮的测试套件证明了其一致性。能很容易的配合多个网络协议一起使用。可扩展。Twisted 是一个事件驱动型的网络引擎。

由于事件驱动编程模型在Twisted 的设计哲学中占有重要的地位,因此这里有必要花点时间来回顾一下究竟事件驱动意味着什么。

事件驱动编程是一种编程范式,这里程序的执行流由外部事件来决定。它的特点是包含一个事件循环,当外部事件发生时使用回调机制来触发相应的处理。另外两种常见的编程范式是(单线程)同步以及多线程编程。

本文twisted是什么梗,Twisted是什么到此分享完毕,希望对大家有所帮助。

关键词:

推荐阅读

猜你喜欢

x 广告

Copyright   2015-2022 时代中介网版权所有  备案号:   联系邮箱: 514 676 113@qq.com