傳輸與協定¶
前言
Transports and Protocols are used by the low-level event loop
APIs such as loop.create_connection(). They use
callback-based programming style and enable high-performance
implementations of network or IPC protocols (e.g. HTTP).
Essentially, transports and protocols should only be used in libraries and frameworks and never in high-level asyncio applications.
This documentation page covers both Transports and Protocols.
Introduction
At the highest level, the transport is concerned with how bytes are transmitted, while the protocol determines which bytes to transmit (and to some extent when).
A different way of saying the same thing: a transport is an abstraction for a socket (or similar I/O endpoint) while a protocol is an abstraction for an application, from the transport's point of view.
Yet another view is the transport and protocol interfaces together define an abstract interface for using network I/O and interprocess I/O.
There is always a 1:1 relationship between transport and protocol objects: the protocol calls transport methods to send data, while the transport calls protocol methods to pass it data that has been received.
Most of connection oriented event loop methods
(such as loop.create_connection()) usually accept a
protocol_factory argument used to create a Protocol object
for an accepted connection, represented by a Transport object.
Such methods usually return a tuple of (transport, protocol).
目錄
This documentation page contains the following sections:
The Transports section documents asyncio
BaseTransport,ReadTransport,WriteTransport,Transport,DatagramTransport, andSubprocessTransportclasses.The Protocols section documents asyncio
BaseProtocol,Protocol,BufferedProtocol,DatagramProtocol, andSubprocessProtocolclasses.The Examples section showcases how to work with transports, protocols, and low-level event loop APIs.
Transports¶
Transports are classes provided by asyncio in order to abstract
various kinds of communication channels.
Transport objects are always instantiated by an asyncio event loop.
asyncio implements transports for TCP, UDP, SSL, and subprocess pipes. The methods available on a transport depend on the transport's kind.
The transport classes are not thread safe.
Transports Hierarchy¶
- class asyncio.BaseTransport¶
Base class for all transports. Contains methods that all asyncio transports share.
- class asyncio.WriteTransport(BaseTransport)¶
A base transport for write-only connections.
Instances of the WriteTransport class are returned from the
loop.connect_write_pipe()event loop method and are also used by subprocess-related methods likeloop.subprocess_exec().
- class asyncio.ReadTransport(BaseTransport)¶
A base transport for read-only connections.
Instances of the ReadTransport class are returned from the
loop.connect_read_pipe()event loop method and are also used by subprocess-related methods likeloop.subprocess_exec().
- class asyncio.Transport(WriteTransport, ReadTransport)¶
Interface representing a bidirectional transport, such as a TCP connection.
The user does not instantiate a transport directly; they call a utility function, passing it a protocol factory and other information necessary to create the transport and protocol.
Instances of the Transport class are returned from or used by event loop methods like
loop.create_connection(),loop.create_unix_connection(),loop.create_server(),loop.sendfile(), etc.
- class asyncio.DatagramTransport(BaseTransport)¶
A transport for datagram (UDP) connections.
Instances of the DatagramTransport class are returned from the
loop.create_datagram_endpoint()event loop method.
- class asyncio.SubprocessTransport(BaseTransport)¶
An abstraction to represent a connection between a parent and its child OS process.
Instances of the SubprocessTransport class are returned from event loop methods
loop.subprocess_shell()andloop.subprocess_exec().