twisted是什么梗_Twisted是什么
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是什么到此分享完毕,希望对大家有所帮助。