mirror of
https://github.com/moparisthebest/spdylay
synced 2024-12-22 07:38:52 -05:00
python: update doc
This commit is contained in:
parent
7b7e020bea
commit
1b91860187
128
doc/python.rst
128
doc/python.rst
@ -875,3 +875,131 @@ SETTINGS ID Flags
|
|||||||
|
|
||||||
.. py:data:: ID_FLAG_SETTINGS_PERSISTED
|
.. py:data:: ID_FLAG_SETTINGS_PERSISTED
|
||||||
|
|
||||||
|
Simple SPDY Server
|
||||||
|
------------------
|
||||||
|
|
||||||
|
This module offers a simple SPDY server implementation to ready for
|
||||||
|
use with little additional code.
|
||||||
|
|
||||||
|
The :py:class:`ThreadedSPDYServer` is a ``socketserver.TCPServer``
|
||||||
|
subclass. As the name of the class suggests, it is multi threaded.
|
||||||
|
It only supports SPDY connection and does not fallback to HTTP/1.1.
|
||||||
|
Since it uses TLS NPN extension, Python 3.3.0 or later is required.
|
||||||
|
|
||||||
|
.. py:class:: ThreadedSPDYServer(server_address, RequestHandlerCalss, cert_file, key_file)
|
||||||
|
|
||||||
|
This class builds on ``TCPServer`` class by passing
|
||||||
|
*server_address* and *RequestHandlerCalss*. The request is handled
|
||||||
|
by the instance of *RequestHandlerCalss*.
|
||||||
|
|
||||||
|
The :py:class:`ThreadedSPDYServer` requires a *RequestHandlerCalss* on
|
||||||
|
instantiation, which must be a subclass of
|
||||||
|
:py:class:`BaseSPDYRequestHandler`.
|
||||||
|
|
||||||
|
Most texts are copied (and modified) from ``http.server``
|
||||||
|
documentation.
|
||||||
|
|
||||||
|
.. py:class:: BaseSPDYRequestHandler(request, client_address, server)
|
||||||
|
|
||||||
|
This class is used to handle the SPDY requests (streams) that
|
||||||
|
arrive at the server. By itself, it cannot respond to any actual
|
||||||
|
SPDY requests; it must be subclassed to handle each request method
|
||||||
|
(e.g. ``GET`` or ``POST``). ``BaseSPDYRequestHandler`` provides a
|
||||||
|
number of class and instance variables, and methods for use by
|
||||||
|
subclasses.
|
||||||
|
|
||||||
|
The handler will gather headers (name/value pairs in SPDY terms)
|
||||||
|
and read POST data (if any), then call a method specific to the
|
||||||
|
request type. The method name is constructed from the request. For
|
||||||
|
example, for the request method ``SPAM``, the ``do_SPAM()`` method
|
||||||
|
will be called with no arguments. All of the relevant information
|
||||||
|
is stored in instance variables of the handler. Subclasses should
|
||||||
|
not need to override or extend the ``__init__()`` method.
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
|
||||||
|
Currently, this implementation accepts request body only if
|
||||||
|
method is POST and the request body will be stored in memory.
|
||||||
|
|
||||||
|
``BaseSPDYRequestHandler`` has the following instance variables:
|
||||||
|
|
||||||
|
.. py:attribute:: client_address
|
||||||
|
|
||||||
|
Contains a tuple of the form ``(host, port)`` referring to the
|
||||||
|
client's address.
|
||||||
|
|
||||||
|
.. py:attribute:: server
|
||||||
|
|
||||||
|
Contains the server instance.
|
||||||
|
|
||||||
|
.. py:attribute:: command
|
||||||
|
|
||||||
|
Contains the command (request type, method). For example,
|
||||||
|
``GET``.
|
||||||
|
|
||||||
|
.. py:attribute:: path
|
||||||
|
|
||||||
|
Contains the request path.
|
||||||
|
|
||||||
|
.. py:attribute:: request_version
|
||||||
|
|
||||||
|
Contains the version string from the request. For example,
|
||||||
|
``HTTP/1.1``.
|
||||||
|
|
||||||
|
.. py:attribute:: headers
|
||||||
|
|
||||||
|
Contains the request headers. Each name/value pair is a tuple
|
||||||
|
of the form ``(name, value)``.
|
||||||
|
|
||||||
|
.. py:attribute:: rfile
|
||||||
|
|
||||||
|
Contains an input stream, positioned at the start of the
|
||||||
|
optional input data. If there is no optional input data, it
|
||||||
|
may be ``None``.
|
||||||
|
|
||||||
|
.. py:attribute:: wfile
|
||||||
|
|
||||||
|
Contains the output stream for writing a response back to the
|
||||||
|
client.
|
||||||
|
|
||||||
|
``BaseSPDYRequestHandler`` has the following class variables:
|
||||||
|
|
||||||
|
.. py:attribute:: server_version
|
||||||
|
|
||||||
|
Specifies the server software version.
|
||||||
|
|
||||||
|
.. py:attribute:: sys_version
|
||||||
|
|
||||||
|
Contains the Python system version.
|
||||||
|
|
||||||
|
A ``BaseSPDYRequestHandler`` instance has the following methods:
|
||||||
|
|
||||||
|
.. py:method:: handle()
|
||||||
|
|
||||||
|
Interacts client exchanging SPDY frames. When a request is
|
||||||
|
completely received, it calls appropriate ``do_*()`` method.
|
||||||
|
This method will handle multiple requests (streams) until SPDY
|
||||||
|
session is over.
|
||||||
|
|
||||||
|
.. py:method:: send_error(code, message=None)
|
||||||
|
|
||||||
|
Send a complete error reply to the client The numeric *code*
|
||||||
|
specifies the HTTP error code, with *message* as optional,
|
||||||
|
more specific text. A complete set of headers is sent,
|
||||||
|
followed by HTML text.
|
||||||
|
|
||||||
|
.. py:method:: send_response(code, message=None)
|
||||||
|
|
||||||
|
Adds a response code and, optionally, short message.
|
||||||
|
This will be formatted as ':status' response header field.
|
||||||
|
|
||||||
|
.. py:method:: send_header(keyword, value)
|
||||||
|
|
||||||
|
Adds the HTTP header. The *keyword* and *value* must be
|
||||||
|
unicode strings and not ``None``.
|
||||||
|
|
||||||
|
The example of ``BaseSPDYRequestHandler`` and ``ThreadedSPDYServer``
|
||||||
|
follows:
|
||||||
|
|
||||||
|
.. literalinclude:: ../python/spdyserv.py
|
||||||
|
:language: python
|
||||||
|
Loading…
Reference in New Issue
Block a user