twisted book

Download Twisted Book

Post on 30-Oct-2014

51 views

Category:

Documents

1 download

Embed Size (px)

TRANSCRIPT

The Twisted DocumentationThe Twisted Development Team September 1, 2012

Contents1 Introduction 1.1 The Vision For Twisted . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 Getting Started 2.1 Writing Servers . . . . . . . . . . . . . . . . . . . . . . . . 2.1.1 Overview . . . . . . . . . . . . . . . . . . . . . . . 2.1.2 Protocols . . . . . . . . . . . . . . . . . . . . . . . 2.1.3 Factories . . . . . . . . . . . . . . . . . . . . . . . 2.1.4 Putting it All Together . . . . . . . . . . . . . . . . 2.2 Writing Clients . . . . . . . . . . . . . . . . . . . . . . . . 2.2.1 Overview . . . . . . . . . . . . . . . . . . . . . . . 2.2.2 Protocol . . . . . . . . . . . . . . . . . . . . . . . . 2.2.3 Simple, single-use clients . . . . . . . . . . . . . . 2.2.4 ClientFactory . . . . . . . . . . . . . . . . . . . . . 2.2.5 A Higher-Level Example: ircLogBot . . . . . . . . 2.2.6 Further Reading . . . . . . . . . . . . . . . . . . . 2.3 Test-driven development with Twisted . . . . . . . . . . . . 2.3.1 Introductory example of Python unit testing . . . . . 2.3.2 Creating an API and writing tests . . . . . . . . . . 2.3.3 Making the tests pass . . . . . . . . . . . . . . . . . 2.3.4 Twisted specic testing . . . . . . . . . . . . . . . . 2.3.5 Testing a protocol . . . . . . . . . . . . . . . . . . . 2.3.6 More good practices . . . . . . . . . . . . . . . . . 2.3.7 Resolve a bug . . . . . . . . . . . . . . . . . . . . . 2.3.8 Code coverage . . . . . . . . . . . . . . . . . . . . 2.3.9 Conclusion . . . . . . . . . . . . . . . . . . . . . . 2.4 Twisted from Scratch, or The Evolution of Finger . . . . . . 2.4.1 Introduction . . . . . . . . . . . . . . . . . . . . . . 2.4.2 Contents . . . . . . . . . . . . . . . . . . . . . . . 2.5 The Evolution of Finger: building a simple nger service . . 2.5.1 Introduction . . . . . . . . . . . . . . . . . . . . . . 2.5.2 Refuse Connections . . . . . . . . . . . . . . . . . 2.5.3 Do Nothing . . . . . . . . . . . . . . . . . . . . . . 2.5.4 Drop Connections . . . . . . . . . . . . . . . . . . 2.5.5 Read Username, Drop Connections . . . . . . . . . 2.5.6 Read Username, Output Error, Drop Connections . . 2.5.7 Output From Empty Factory . . . . . . . . . . . . . 2.5.8 Output from Non-empty Factory . . . . . . . . . . . 2.5.9 Use Deferreds . . . . . . . . . . . . . . . . . . . . . 2.5.10 Run nger Locally . . . . . . . . . . . . . . . . . 2.5.11 Read Status from the Web . . . . . . . . . . . . . . 2.5.12 Use Application . . . . . . . . . . . . . . . . . . . 2.5.13 twistd . . . . . . . . . . . . . . . . . . . . . . . . . 2.6 The Evolution of Finger: adding features to the nger service 2.6.1 Introduction . . . . . . . . . . . . . . . . . . . . . . 1 7 7 8 8 8 8 10 11 13 13 13 14 15 16 19 19 20 20 23 27 27 31 37 39 40 40 40 40 41 41 41 41 42 42 43 43 44 44 45 46 47 47 48 48

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

CONTENTS2.6.2 Setting Message By Local Users . . . . . . . . . . . . . . . . . . 2.6.3 Use Services to Make Dependencies Sane . . . . . . . . . . . . . 2.6.4 Read Status File . . . . . . . . . . . . . . . . . . . . . . . . . . 2.6.5 Announce on Web, Too . . . . . . . . . . . . . . . . . . . . . . . 2.6.6 Announce on IRC, Too . . . . . . . . . . . . . . . . . . . . . . . 2.6.7 Add XML-RPC Support . . . . . . . . . . . . . . . . . . . . . . The Evolution of Finger: cleaning up the nger code . . . . . . . . . . . 2.7.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.7.2 Write Readable Code . . . . . . . . . . . . . . . . . . . . . . . . The Evolution of Finger: moving to a component based architecture . . . 2.8.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.8.2 Write Maintainable Code . . . . . . . . . . . . . . . . . . . . . . 2.8.3 Advantages of Latest Version . . . . . . . . . . . . . . . . . . . 2.8.4 Aspect-Oriented Programming . . . . . . . . . . . . . . . . . . . The Evolution of Finger: pluggable backends . . . . . . . . . . . . . . . 2.9.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.9.2 Another Back-end . . . . . . . . . . . . . . . . . . . . . . . . . 2.9.3 Yet Another Back-end: Doing the Standard Thing . . . . . . . . . The Evolution of Finger: a web frontend . . . . . . . . . . . . . . . . . . 2.10.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . The Evolution of Finger: Twisted client support using Perspective Broker 2.11.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.11.2 Use Perspective Broker . . . . . . . . . . . . . . . . . . . . . . . The Evolution of Finger: using a single factory for multiple protocols . . 2.12.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.12.2 Support HTTPS . . . . . . . . . . . . . . . . . . . . . . . . . . . The Evolution of Finger: a Twisted nger client . . . . . . . . . . . . . . 2.13.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.13.2 Finger Proxy . . . . . . . . . . . . . . . . . . . . . . . . . . . . The Evolution of Finger: making a nger library . . . . . . . . . . . . . 2.14.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.14.2 Organization . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.14.3 Easy Conguration . . . . . . . . . . . . . . . . . . . . . . . . . The Evolution of Finger: conguration and packaging of the nger service 2.15.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.15.2 Plugins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.15.3 OS Integration . . . . . . . . . . . . . . . . . . . . . . . . . . . Setting up the TwistedQuotes application . . . . . . . . . . . . . . . . . 2.16.1 Goal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.16.2 Setting up the TwistedQuotes project directory . . . . . . . . . . Designing Twisted Applications . . . . . . . . . . . . . . . . . . . . . . 2.17.1 Goals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.17.2 Example of a modular design: TwistedQuotes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

2 48 49 51 52 54 56 58 58 58 61 61 61 66 71 71 71 71 77 83 83 89 89 89 95 95 95 101 101 101 104 104 104 105 106 106 106 114 114 114 1