blob: 3fa2f3ec50c0b3013debcdeae07eee676f4fe471 [file] [log] [blame]
R David Murray6a143812013-12-20 14:37:39 -05001.. currentmodule:: asyncio
Victor Stinnerea3183f2013-12-03 01:08:00 +01002
Victor Stinner1374bd42014-01-24 15:34:19 +01003+++++++++++++++++++++++++++++++++++++++++
4Transports and protocols (low-level API)
5+++++++++++++++++++++++++++++++++++++++++
Victor Stinner1ca5ba62013-12-03 01:49:43 +01006
Victor Stinner9592edb2014-02-02 15:03:02 +01007.. _asyncio-transport:
Victor Stinnerea3183f2013-12-03 01:08:00 +01008
9Transports
10==========
11
Guido van Rossum589872c2014-03-29 21:14:04 -070012Transports are classes provided by :mod:`asyncio` in order to abstract
Victor Stinnerea3183f2013-12-03 01:08:00 +010013various kinds of communication channels. You generally won't instantiate
14a transport yourself; instead, you will call a :class:`BaseEventLoop` method
15which will create the transport and try to initiate the underlying
16communication channel, calling you back when it succeeds.
17
18Once the communication channel is established, a transport is always
Victor Stinner9592edb2014-02-02 15:03:02 +010019paired with a :ref:`protocol <asyncio-protocol>` instance. The protocol can
Victor Stinnerea3183f2013-12-03 01:08:00 +010020then call the transport's methods for various purposes.
21
22:mod:`asyncio` currently implements transports for TCP, UDP, SSL, and
23subprocess pipes. The methods available on a transport depend on
24the transport's kind.
25
26
Victor Stinner0c6f1ca2013-12-03 01:46:39 +010027BaseTransport
28-------------
Victor Stinnerea3183f2013-12-03 01:08:00 +010029
30.. class:: BaseTransport
31
32 Base class for transports.
33
34 .. method:: close(self)
35
36 Close the transport. If the transport has a buffer for outgoing
37 data, buffered data will be flushed asynchronously. No more data
38 will be received. After all buffered data is flushed, the
39 protocol's :meth:`connection_lost` method will be called with
40 :const:`None` as its argument.
41
42
43 .. method:: get_extra_info(name, default=None)
44
45 Return optional transport information. *name* is a string representing
46 the piece of transport-specific information to get, *default* is the
47 value to return if the information doesn't exist.
48
49 This method allows transport implementations to easily expose
50 channel-specific information.
51
52 * socket:
53
54 - ``'peername'``: the remote address to which the socket is connected,
55 result of :meth:`socket.socket.getpeername` (``None`` on error)
56 - ``'socket'``: :class:`socket.socket` instance
57 - ``'sockname'``: the socket's own address,
58 result of :meth:`socket.socket.getsockname`
59
60 * SSL socket:
61
62 - ``'compression'``: the compression algorithm being used as a string,
63 or ``None`` if the connection isn't compressed; result of
64 :meth:`ssl.SSLSocket.compression`
65 - ``'cipher'``: a three-value tuple containing the name of the cipher
66 being used, the version of the SSL protocol that defines its use, and
67 the number of secret bits being used; result of
68 :meth:`ssl.SSLSocket.cipher`
69 - ``'peercert'``: peer certificate; result of
70 :meth:`ssl.SSLSocket.getpeercert`
71 - ``'sslcontext'``: :class:`ssl.SSLContext` instance
72
73 * pipe:
74
75 - ``'pipe'``: pipe object
76
77 * subprocess:
78
79 - ``'subprocess'``: :class:`subprocess.Popen` instance
80
81
Victor Stinner0c6f1ca2013-12-03 01:46:39 +010082ReadTransport
83-------------
Victor Stinnerea3183f2013-12-03 01:08:00 +010084
85.. class:: ReadTransport
86
87 Interface for read-only transports.
88
89 .. method:: pause_reading()
90
91 Pause the receiving end of the transport. No data will be passed to
Victor Stinner51f31292014-03-21 17:17:15 +010092 the protocol's :meth:`data_received` method until :meth:`resume_reading`
Victor Stinnerea3183f2013-12-03 01:08:00 +010093 is called.
94
95 .. method:: resume_reading()
96
97 Resume the receiving end. The protocol's :meth:`data_received` method
98 will be called once again if some data is available for reading.
99
100
Victor Stinner0c6f1ca2013-12-03 01:46:39 +0100101WriteTransport
102--------------
Victor Stinnerea3183f2013-12-03 01:08:00 +0100103
104.. class:: WriteTransport
105
106 Interface for write-only transports.
107
108 .. method:: abort()
109
110 Close the transport immediately, without waiting for pending operations
111 to complete. Buffered data will be lost. No more data will be received.
112 The protocol's :meth:`connection_lost` method will eventually be
113 called with :const:`None` as its argument.
114
115 .. method:: can_write_eof()
116
117 Return :const:`True` if the transport supports :meth:`write_eof`,
118 :const:`False` if not.
119
120 .. method:: get_write_buffer_size()
121
122 Return the current size of the output buffer used by the transport.
123
Victor Stinner52bb9492014-08-26 00:22:28 +0200124 .. method:: get_write_buffer_limits()
125
126 Get the *high*- and *low*-water limits for write flow control. Return a
127 tuple ``(low, high)`` where *low* and *high* are positive number of
128 bytes.
129
130 Use :meth:`set_write_buffer_limits` to set the limits.
131
132 .. versionadded:: 3.4.2
133
Victor Stinnerea3183f2013-12-03 01:08:00 +0100134 .. method:: set_write_buffer_limits(high=None, low=None)
135
136 Set the *high*- and *low*-water limits for write flow control.
137
138 These two values control when call the protocol's
139 :meth:`pause_writing` and :meth:`resume_writing` methods are called.
140 If specified, the low-water limit must be less than or equal to the
141 high-water limit. Neither *high* nor *low* can be negative.
142
143 The defaults are implementation-specific. If only the
144 high-water limit is given, the low-water limit defaults to a
145 implementation-specific value less than or equal to the
146 high-water limit. Setting *high* to zero forces *low* to zero as
147 well, and causes :meth:`pause_writing` to be called whenever the
148 buffer becomes non-empty. Setting *low* to zero causes
149 :meth:`resume_writing` to be called only once the buffer is empty.
150 Use of zero for either limit is generally sub-optimal as it
151 reduces opportunities for doing I/O and computation
152 concurrently.
153
Victor Stinner52bb9492014-08-26 00:22:28 +0200154 Use :meth:`get_write_buffer_limits` to get the limits.
155
Victor Stinnerea3183f2013-12-03 01:08:00 +0100156 .. method:: write(data)
157
158 Write some *data* bytes to the transport.
159
160 This method does not block; it buffers the data and arranges for it
161 to be sent out asynchronously.
162
163 .. method:: writelines(list_of_data)
164
165 Write a list (or any iterable) of data bytes to the transport.
166 This is functionally equivalent to calling :meth:`write` on each
167 element yielded by the iterable, but may be implemented more efficiently.
168
169 .. method:: write_eof()
170
171 Close the write end of the transport after flushing buffered data.
172 Data may still be received.
173
174 This method can raise :exc:`NotImplementedError` if the transport
175 (e.g. SSL) doesn't support half-closes.
176
177
Victor Stinner0c6f1ca2013-12-03 01:46:39 +0100178DatagramTransport
179-----------------
Victor Stinnerea3183f2013-12-03 01:08:00 +0100180
181.. method:: DatagramTransport.sendto(data, addr=None)
182
183 Send the *data* bytes to the remote peer given by *addr* (a
184 transport-dependent target address). If *addr* is :const:`None`, the
185 data is sent to the target address given on transport creation.
186
187 This method does not block; it buffers the data and arranges for it
188 to be sent out asynchronously.
189
190.. method:: DatagramTransport.abort()
191
192 Close the transport immediately, without waiting for pending operations
193 to complete. Buffered data will be lost. No more data will be received.
194 The protocol's :meth:`connection_lost` method will eventually be
195 called with :const:`None` as its argument.
196
197
Victor Stinner0c6f1ca2013-12-03 01:46:39 +0100198BaseSubprocessTransport
199-----------------------
Victor Stinnerea3183f2013-12-03 01:08:00 +0100200
201.. class:: BaseSubprocessTransport
202
203 .. method:: get_pid()
204
205 Return the subprocess process id as an integer.
206
Victor Stinnerea3183f2013-12-03 01:08:00 +0100207 .. method:: get_pipe_transport(fd)
208
Brian Curtina1afeec2014-02-08 18:36:14 -0600209 Return the transport for the communication pipe corresponding to the
Victor Stinnerea3183f2013-12-03 01:08:00 +0100210 integer file descriptor *fd*. The return value can be a readable or
211 writable streaming transport, depending on the *fd*. If *fd* doesn't
212 correspond to a pipe belonging to this transport, :const:`None` is
213 returned.
214
Victor Stinner933a8c82013-12-03 01:59:38 +0100215 .. method:: get_returncode()
216
217 Return the subprocess returncode as an integer or :const:`None`
218 if it hasn't returned, similarly to the
219 :attr:`subprocess.Popen.returncode` attribute.
220
221 .. method:: kill(self)
222
223 Kill the subprocess, as in :meth:`subprocess.Popen.kill`
224
225 On POSIX systems, the function sends SIGKILL to the subprocess.
226 On Windows, this method is an alias for :meth:`terminate`.
227
Victor Stinnerea3183f2013-12-03 01:08:00 +0100228 .. method:: send_signal(signal)
229
230 Send the *signal* number to the subprocess, as in
231 :meth:`subprocess.Popen.send_signal`.
232
233 .. method:: terminate()
234
235 Ask the subprocess to stop, as in :meth:`subprocess.Popen.terminate`.
236 This method is an alias for the :meth:`close` method.
237
238 On POSIX systems, this method sends SIGTERM to the subprocess.
239 On Windows, the Windows API function TerminateProcess() is called to
240 stop the subprocess.
241
Victor Stinnerea3183f2013-12-03 01:08:00 +0100242
Victor Stinner9592edb2014-02-02 15:03:02 +0100243.. _asyncio-protocol:
Victor Stinnerea3183f2013-12-03 01:08:00 +0100244
245Protocols
246=========
247
248:mod:`asyncio` provides base classes that you can subclass to implement
249your network protocols. Those classes are used in conjunction with
Victor Stinner9592edb2014-02-02 15:03:02 +0100250:ref:`transports <asyncio-transport>` (see below): the protocol parses incoming
Victor Stinnerea3183f2013-12-03 01:08:00 +0100251data and asks for the writing of outgoing data, while the transport is
252responsible for the actual I/O and buffering.
253
254When subclassing a protocol class, it is recommended you override certain
255methods. Those methods are callbacks: they will be called by the transport
256on certain events (for example when some data is received); you shouldn't
257call them yourself, unless you are implementing a transport.
258
259.. note::
260 All callbacks have default implementations, which are empty. Therefore,
261 you only need to implement the callbacks for the events in which you
262 are interested.
263
264
265Protocol classes
266----------------
267
268.. class:: Protocol
269
270 The base class for implementing streaming protocols (for use with
271 e.g. TCP and SSL transports).
272
273.. class:: DatagramProtocol
274
275 The base class for implementing datagram protocols (for use with
276 e.g. UDP transports).
277
278.. class:: SubprocessProtocol
279
280 The base class for implementing protocols communicating with child
281 processes (through a set of unidirectional pipes).
282
283
284Connection callbacks
285--------------------
286
Victor Stinner15386652014-06-10 09:19:26 +0200287These callbacks may be called on :class:`Protocol`, :class:`DatagramProtocol`
288and :class:`SubprocessProtocol` instances:
Victor Stinnerea3183f2013-12-03 01:08:00 +0100289
290.. method:: BaseProtocol.connection_made(transport)
291
292 Called when a connection is made.
293
294 The *transport* argument is the transport representing the
295 connection. You are responsible for storing it somewhere
296 (e.g. as an attribute) if you need to.
297
298.. method:: BaseProtocol.connection_lost(exc)
299
300 Called when the connection is lost or closed.
301
302 The argument is either an exception object or :const:`None`.
303 The latter means a regular EOF is received, or the connection was
304 aborted or closed by this side of the connection.
305
Victor Stinner15386652014-06-10 09:19:26 +0200306:meth:`~BaseProtocol.connection_made` and :meth:`~BaseProtocol.connection_lost`
307are called exactly once per successful connection. All other callbacks will be
308called between those two methods, which allows for easier resource management
309in your protocol implementation.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100310
311The following callbacks may be called only on :class:`SubprocessProtocol`
312instances:
313
314.. method:: SubprocessProtocol.pipe_data_received(fd, data)
315
316 Called when the child process writes data into its stdout or stderr pipe.
317 *fd* is the integer file descriptor of the pipe. *data* is a non-empty
318 bytes object containing the data.
319
320.. method:: SubprocessProtocol.pipe_connection_lost(fd, exc)
321
322 Called when one of the pipes communicating with the child process
323 is closed. *fd* is the integer file descriptor that was closed.
324
325.. method:: SubprocessProtocol.process_exited()
326
327 Called when the child process has exited.
328
329
Victor Stinnerea3183f2013-12-03 01:08:00 +0100330Streaming protocols
Victor Stinner0c6f1ca2013-12-03 01:46:39 +0100331-------------------
Victor Stinnerea3183f2013-12-03 01:08:00 +0100332
333The following callbacks are called on :class:`Protocol` instances:
334
335.. method:: Protocol.data_received(data)
336
337 Called when some data is received. *data* is a non-empty bytes object
338 containing the incoming data.
339
340 .. note::
341 Whether the data is buffered, chunked or reassembled depends on
342 the transport. In general, you shouldn't rely on specific semantics
343 and instead make your parsing generic and flexible enough. However,
344 data is always received in the correct order.
345
346.. method:: Protocol.eof_received()
347
348 Calls when the other end signals it won't send any more data
349 (for example by calling :meth:`write_eof`, if the other end also uses
350 asyncio).
351
352 This method may return a false value (including None), in which case
353 the transport will close itself. Conversely, if this method returns a
354 true value, closing the transport is up to the protocol. Since the
355 default implementation returns None, it implicitly closes the connection.
356
357 .. note::
358 Some transports such as SSL don't support half-closed connections,
359 in which case returning true from this method will not prevent closing
360 the connection.
361
362:meth:`data_received` can be called an arbitrary number of times during
363a connection. However, :meth:`eof_received` is called at most once
364and, if called, :meth:`data_received` won't be called after it.
365
366Datagram protocols
Victor Stinner0c6f1ca2013-12-03 01:46:39 +0100367------------------
Victor Stinnerea3183f2013-12-03 01:08:00 +0100368
369The following callbacks are called on :class:`DatagramProtocol` instances.
370
371.. method:: DatagramProtocol.datagram_received(data, addr)
372
373 Called when a datagram is received. *data* is a bytes object containing
374 the incoming data. *addr* is the address of the peer sending the data;
375 the exact format depends on the transport.
376
377.. method:: DatagramProtocol.error_received(exc)
378
379 Called when a previous send or receive operation raises an
380 :class:`OSError`. *exc* is the :class:`OSError` instance.
381
382 This method is called in rare conditions, when the transport (e.g. UDP)
383 detects that a datagram couldn't be delivered to its recipient.
384 In many conditions though, undeliverable datagrams will be silently
385 dropped.
386
387
388Flow control callbacks
389----------------------
390
Larry Hastings3732ed22014-03-15 21:13:56 -0700391These callbacks may be called on :class:`Protocol`,
392:class:`DatagramProtocol` and :class:`SubprocessProtocol` instances:
Victor Stinnerea3183f2013-12-03 01:08:00 +0100393
394.. method:: BaseProtocol.pause_writing()
395
396 Called when the transport's buffer goes over the high-water mark.
397
398.. method:: BaseProtocol.resume_writing()
399
400 Called when the transport's buffer drains below the low-water mark.
401
402
403:meth:`pause_writing` and :meth:`resume_writing` calls are paired --
404:meth:`pause_writing` is called once when the buffer goes strictly over
405the high-water mark (even if subsequent writes increases the buffer size
406even more), and eventually :meth:`resume_writing` is called once when the
407buffer size reaches the low-water mark.
408
409.. note::
410 If the buffer size equals the high-water mark,
411 :meth:`pause_writing` is not called -- it must go strictly over.
412 Conversely, :meth:`resume_writing` is called when the buffer size is
413 equal or lower than the low-water mark. These end conditions
414 are important to ensure that things go as expected when either
415 mark is zero.
416
Larry Hastings3732ed22014-03-15 21:13:56 -0700417.. note::
418 On BSD systems (OS X, FreeBSD, etc.) flow control is not supported
419 for :class:`DatagramProtocol`, because send failures caused by
420 writing too many packets cannot be detected easily. The socket
421 always appears 'ready' and excess packets are dropped; an
422 :class:`OSError` with errno set to :const:`errno.ENOBUFS` may or
423 may not be raised; if it is raised, it will be reported to
424 :meth:`DatagramProtocol.error_received` but otherwise ignored.
425
Victor Stinnerea3183f2013-12-03 01:08:00 +0100426
Victor Stinner4b4f9eb2014-01-24 17:33:20 +0100427Coroutines and protocols
428------------------------
429
430Coroutines can be scheduled in a protocol method using :func:`async`, but there
431is not guarantee on the execution order. Protocols are not aware of coroutines
432created in protocol methods and so will not wait for them.
433
Victor Stinner9592edb2014-02-02 15:03:02 +0100434To have a reliable execution order, use :ref:`stream objects <asyncio-streams>` in a
Victor Stinner4b4f9eb2014-01-24 17:33:20 +0100435coroutine with ``yield from``. For example, the :meth:`StreamWriter.drain`
436coroutine can be used to wait until the write buffer is flushed.
437
438
Victor Stinner04e6df32014-10-11 16:16:27 +0200439Protocol examples
440=================
Victor Stinnerea3183f2013-12-03 01:08:00 +0100441
Victor Stinner04e6df32014-10-11 16:16:27 +0200442TCP echo client
443---------------
Victor Stinner0c6f1ca2013-12-03 01:46:39 +0100444
Victor Stinner31d83222013-12-04 11:16:17 +0100445TCP echo client example, send data and wait until the connection is closed::
Victor Stinner0c6f1ca2013-12-03 01:46:39 +0100446
447 import asyncio
448
449 class EchoClient(asyncio.Protocol):
450 message = 'This is the message. It will be echoed.'
451
452 def connection_made(self, transport):
Victor Stinner31d83222013-12-04 11:16:17 +0100453 transport.write(self.message.encode())
454 print('data sent: {}'.format(self.message))
Victor Stinner0c6f1ca2013-12-03 01:46:39 +0100455
456 def data_received(self, data):
Victor Stinner31d83222013-12-04 11:16:17 +0100457 print('data received: {}'.format(data.decode()))
Victor Stinner0c6f1ca2013-12-03 01:46:39 +0100458
459 def connection_lost(self, exc):
Victor Stinner31d83222013-12-04 11:16:17 +0100460 print('server closed the connection')
Victor Stinner0c6f1ca2013-12-03 01:46:39 +0100461 asyncio.get_event_loop().stop()
462
463 loop = asyncio.get_event_loop()
Victor Stinnera881a7f2013-12-09 13:19:23 +0100464 coro = loop.create_connection(EchoClient, '127.0.0.1', 8888)
465 loop.run_until_complete(coro)
Victor Stinner0c6f1ca2013-12-03 01:46:39 +0100466 loop.run_forever()
467 loop.close()
Victor Stinnerea3183f2013-12-03 01:08:00 +0100468
Victor Stinnera881a7f2013-12-09 13:19:23 +0100469The event loop is running twice. The
470:meth:`~BaseEventLoop.run_until_complete` method is preferred in this short
471example to raise an exception if the server is not listening, instead of
472having to write a short coroutine to handle the exception and stop the
473running loop. At :meth:`~BaseEventLoop.run_until_complete` exit, the loop is
Andrew Svetlov588517c2014-07-23 11:27:17 +0300474no longer running, so there is no need to stop the loop in case of an error.
Victor Stinnera881a7f2013-12-09 13:19:23 +0100475
Victor Stinner04e6df32014-10-11 16:16:27 +0200476TCP echo server
477---------------
Victor Stinnera881a7f2013-12-09 13:19:23 +0100478
479TCP echo server example, send back received data and close the connection::
480
481 import asyncio
482
483 class EchoServer(asyncio.Protocol):
484 def connection_made(self, transport):
485 peername = transport.get_extra_info('peername')
486 print('connection from {}'.format(peername))
487 self.transport = transport
488
489 def data_received(self, data):
490 print('data received: {}'.format(data.decode()))
491 self.transport.write(data)
492
493 # close the socket
494 self.transport.close()
495
496 loop = asyncio.get_event_loop()
497 coro = loop.create_server(EchoServer, '127.0.0.1', 8888)
498 server = loop.run_until_complete(coro)
499 print('serving on {}'.format(server.sockets[0].getsockname()))
500
501 try:
502 loop.run_forever()
503 except KeyboardInterrupt:
504 print("exit")
505 finally:
506 server.close()
507 loop.close()
508
R David Murray530a69f2013-12-14 11:26:06 -0500509:meth:`Transport.close` can be called immediately after
Victor Stinnera881a7f2013-12-09 13:19:23 +0100510:meth:`WriteTransport.write` even if data are not sent yet on the socket: both
511methods are asynchronous. ``yield from`` is not needed because these transport
Larry Hastings3732ed22014-03-15 21:13:56 -0700512methods are not coroutines.
Victor Stinnera881a7f2013-12-09 13:19:23 +0100513
Victor Stinner04e6df32014-10-11 16:16:27 +0200514.. _asyncio-register-socket:
Victor Stinnera881a7f2013-12-09 13:19:23 +0100515
Victor Stinner04e6df32014-10-11 16:16:27 +0200516Register an open socket to wait for data using a protocol
517---------------------------------------------------------
518
519Wait until a socket receives data using the
520:meth:`BaseEventLoop.create_connection` method with a protocol, and then close
521the event loop ::
522
523 import asyncio
524 import socket
525
526 # Create a pair of connected sockets
527 rsock, wsock = socket.socketpair()
528 loop = asyncio.get_event_loop()
529
530 class MyProtocol(asyncio.Protocol):
531 transport = None
532
533 def connection_made(self, transport):
534 self.transport = transport
535
536 def data_received(self, data):
537 print("Received:", data.decode())
538
539 # We are done: close the transport (it will call connection_lost())
540 self.transport.close()
541
542 def connection_lost(self, exc):
543 # The socket has been closed, stop the event loop
544 loop.stop()
545
546 # Register the socket to wait for data
547 connect_coro = loop.create_connection(MyProtocol, sock=rsock)
548 transport, protocol = loop.run_until_complete(connect_coro)
549
550 # Simulate the reception of data from the network
551 loop.call_soon(wsock.send, 'abc'.encode())
552
553 # Run the event loop
554 loop.run_forever()
555
556 # We are done, close sockets and the event loop
557 rsock.close()
558 wsock.close()
559 loop.close()
560
561.. seealso::
562
563 The :ref:`watch a file descriptor for read events
564 <asyncio-watch-read-event>` example uses the low-level
565 :meth:`BaseEventLoop.add_reader` method to register the file descriptor of a
566 socket.
567
568 The :ref:`register an open socket to wait for data using streams
569 <asyncio-register-socket-streams>` example uses high-level streams
570 created by the :func:`open_connection` function in a coroutine.