blob: 3b5ed0c1a71e549f44cab818cca5a0de0d2b3a7f [file] [log] [blame]
Fred Drake295da241998-08-10 19:42:37 +00001\section{\module{SocketServer} ---
Fred Drakef8ca7d82000-10-10 17:03:45 +00002 A framework for network servers}
Fred Drakeb91e9341998-07-23 17:59:49 +00003
Fred Drakef8ca7d82000-10-10 17:03:45 +00004\declaremodule{standard}{SocketServer}
Fred Drakeb91e9341998-07-23 17:59:49 +00005\modulesynopsis{A framework for network servers.}
6
Guido van Rossum6181e001997-05-19 19:55:16 +00007
Fred Drakebe2b6d71998-03-14 06:40:34 +00008The \module{SocketServer} module simplifies the task of writing network
Fred Drake0d3b4f81997-12-04 14:36:52 +00009servers.
Guido van Rossum6181e001997-05-19 19:55:16 +000010
Fred Drakebe2b6d71998-03-14 06:40:34 +000011There are four basic server classes: \class{TCPServer} uses the
Guido van Rossum6181e001997-05-19 19:55:16 +000012Internet TCP protocol, which provides for continuous streams of data
Fred Drakebe2b6d71998-03-14 06:40:34 +000013between the client and server. \class{UDPServer} uses datagrams, which
Guido van Rossum6181e001997-05-19 19:55:16 +000014are discrete packets of information that may arrive out of order or be
15lost while in transit. The more infrequently used
Fred Drakebe2b6d71998-03-14 06:40:34 +000016\class{UnixStreamServer} and \class{UnixDatagramServer} classes are
Fred Drakea8090641998-01-13 19:10:02 +000017similar, but use \UNIX{} domain sockets; they're not available on
18non-\UNIX{} platforms. For more details on network programming, consult
Fred Drake37f15741999-11-10 16:21:37 +000019a book such as W. Richard Steven's \citetitle{UNIX Network Programming}
20or Ralph Davis's \citetitle{Win32 Network Programming}.
Guido van Rossum6181e001997-05-19 19:55:16 +000021
22These four classes process requests \dfn{synchronously}; each request
23must be completed before the next request can be started. This isn't
24suitable if each request takes a long time to complete, because it
25requires a lot of computation, or because it returns a lot of data
26which the client is slow to process. The solution is to create a
27separate process or thread to handle each request; the
Fred Drakebe2b6d71998-03-14 06:40:34 +000028\class{ForkingMixIn} and \class{ThreadingMixIn} mix-in classes can be
Guido van Rossum6181e001997-05-19 19:55:16 +000029used to support asynchronous behaviour.
30
31Creating a server requires several steps. First, you must create a
Fred Drakebe2b6d71998-03-14 06:40:34 +000032request handler class by subclassing the \class{BaseRequestHandler}
33class and overriding its \method{handle()} method; this method will
Guido van Rossum6181e001997-05-19 19:55:16 +000034process incoming requests. Second, you must instantiate one of the
35server classes, passing it the server's address and the request
Fred Drakebe2b6d71998-03-14 06:40:34 +000036handler class. Finally, call the \method{handle_request()} or
37\method{serve_forever()} method of the server object to process one or
Guido van Rossum6181e001997-05-19 19:55:16 +000038many requests.
39
Martin v. Löwisf86e8ef2002-11-22 08:08:44 +000040When inheriting from \class{ThreadingMixIn} for threaded connection
41behavior, you should explicitly declare how you want your threads
42to behave on an abrupt shutdown. The \class{ThreadingMixIn} class
43defines an attribute \var{daemon_threads}, which indicates whether
44or not the server should wait for thread termination. You should
45set the flag explicitly if you would like threads to behave
Fred Drakea191bef2002-11-22 14:29:42 +000046autonomously; the default is \constant{False}, meaning that Python
47will not exit until all threads created by \class{ThreadingMixIn} have
48exited.
Martin v. Löwisf86e8ef2002-11-22 08:08:44 +000049
Guido van Rossum6181e001997-05-19 19:55:16 +000050Server classes have the same external methods and attributes, no
51matter what network protocol they use:
52
Fred Drake19479911998-02-13 06:58:54 +000053\setindexsubitem{(SocketServer protocol)}
Fred Drake798654f1997-11-30 05:53:22 +000054
Guido van Rossum6181e001997-05-19 19:55:16 +000055%XXX should data and methods be intermingled, or separate?
56% how should the distinction between class and instance variables be
57% drawn?
58
59\begin{funcdesc}{fileno}{}
60Return an integer file descriptor for the socket on which the server
61is listening. This function is most commonly passed to
Fred Drakebe2b6d71998-03-14 06:40:34 +000062\function{select.select()}, to allow monitoring multiple servers in the
Guido van Rossum6181e001997-05-19 19:55:16 +000063same process.
64\end{funcdesc}
65
66\begin{funcdesc}{handle_request}{}
67Process a single request. This function calls the following methods
Fred Drakebe2b6d71998-03-14 06:40:34 +000068in order: \method{get_request()}, \method{verify_request()}, and
69\method{process_request()}. If the user-provided \method{handle()}
70method of the handler class raises an exception, the server's
71\method{handle_error()} method will be called.
Guido van Rossum6181e001997-05-19 19:55:16 +000072\end{funcdesc}
73
74\begin{funcdesc}{serve_forever}{}
75Handle an infinite number of requests. This simply calls
Fred Drakebe2b6d71998-03-14 06:40:34 +000076\method{handle_request()} inside an infinite loop.
Guido van Rossum6181e001997-05-19 19:55:16 +000077\end{funcdesc}
78
79\begin{datadesc}{address_family}
80The family of protocols to which the server's socket belongs.
Fred Drakebe2b6d71998-03-14 06:40:34 +000081\constant{socket.AF_INET} and \constant{socket.AF_UNIX} are two
82possible values.
Guido van Rossum6181e001997-05-19 19:55:16 +000083\end{datadesc}
84
85\begin{datadesc}{RequestHandlerClass}
86The user-provided request handler class; an instance of this class is
87created for each request.
88\end{datadesc}
89
90\begin{datadesc}{server_address}
91The address on which the server is listening. The format of addresses
92varies depending on the protocol family; see the documentation for the
93socket module for details. For Internet protocols, this is a tuple
94containing a string giving the address, and an integer port number:
95\code{('127.0.0.1', 80)}, for example.
96\end{datadesc}
97
98\begin{datadesc}{socket}
99The socket object on which the server will listen for incoming requests.
100\end{datadesc}
101
102% XXX should class variables be covered before instance variables, or
103% vice versa?
104
105The server classes support the following class variables:
106
Moshe Zadkadd802202000-12-13 20:39:22 +0000107\begin{datadesc}{allow_reuse_address}
108Whether the server will allow the reuse of an address. This defaults
Raymond Hettinger7ad09552002-08-25 16:27:33 +0000109to \code{False}, and can be set in subclasses to change the policy.
Moshe Zadkadd802202000-12-13 20:39:22 +0000110\end{datadesc}
111
Guido van Rossum6181e001997-05-19 19:55:16 +0000112\begin{datadesc}{request_queue_size}
113The size of the request queue. If it takes a long time to process a
114single request, any requests that arrive while the server is busy are
Fred Drakebe2b6d71998-03-14 06:40:34 +0000115placed into a queue, up to \member{request_queue_size} requests. Once
Guido van Rossum6181e001997-05-19 19:55:16 +0000116the queue is full, further requests from clients will get a
117``Connection denied'' error. The default value is usually 5, but this
118can be overridden by subclasses.
119\end{datadesc}
120
121\begin{datadesc}{socket_type}
Fred Drakebe2b6d71998-03-14 06:40:34 +0000122The type of socket used by the server; \constant{socket.SOCK_STREAM}
123and \constant{socket.SOCK_DGRAM} are two possible values.
Guido van Rossum6181e001997-05-19 19:55:16 +0000124\end{datadesc}
125
126There are various server methods that can be overridden by subclasses
Fred Drakebe2b6d71998-03-14 06:40:34 +0000127of base server classes like \class{TCPServer}; these methods aren't
Guido van Rossum6181e001997-05-19 19:55:16 +0000128useful to external users of the server object.
129
130% should the default implementations of these be documented, or should
131% it be assumed that the user will look at SocketServer.py?
132
133\begin{funcdesc}{finish_request}{}
134Actually processes the request by instantiating
Fred Drakebe2b6d71998-03-14 06:40:34 +0000135\member{RequestHandlerClass} and calling its \method{handle()} method.
Guido van Rossum6181e001997-05-19 19:55:16 +0000136\end{funcdesc}
137
138\begin{funcdesc}{get_request}{}
139Must accept a request from the socket, and return a 2-tuple containing
140the \emph{new} socket object to be used to communicate with the
141client, and the client's address.
142\end{funcdesc}
143
Fred Drakecce10901998-03-17 06:33:25 +0000144\begin{funcdesc}{handle_error}{request, client_address}
Fred Drakebe2b6d71998-03-14 06:40:34 +0000145This function is called if the \member{RequestHandlerClass}'s
146\method{handle()} method raises an exception. The default action is
147to print the traceback to standard output and continue handling
148further requests.
Guido van Rossum6181e001997-05-19 19:55:16 +0000149\end{funcdesc}
150
Fred Drakecce10901998-03-17 06:33:25 +0000151\begin{funcdesc}{process_request}{request, client_address}
Fred Drakebe2b6d71998-03-14 06:40:34 +0000152Calls \method{finish_request()} to create an instance of the
153\member{RequestHandlerClass}. If desired, this function can create a
154new process or thread to handle the request; the \class{ForkingMixIn}
155and \class{ThreadingMixIn} classes do this.
Guido van Rossum6181e001997-05-19 19:55:16 +0000156\end{funcdesc}
157
158% Is there any point in documenting the following two functions?
159% What would the purpose of overriding them be: initializing server
160% instance variables, adding new network families?
161
162\begin{funcdesc}{server_activate}{}
163Called by the server's constructor to activate the server.
164May be overridden.
165\end{funcdesc}
166
167\begin{funcdesc}{server_bind}{}
168Called by the server's constructor to bind the socket to the desired
169address. May be overridden.
170\end{funcdesc}
171
Fred Drakecce10901998-03-17 06:33:25 +0000172\begin{funcdesc}{verify_request}{request, client_address}
Guido van Rossum6181e001997-05-19 19:55:16 +0000173Must return a Boolean value; if the value is true, the request will be
174processed, and if it's false, the request will be denied.
175This function can be overridden to implement access controls for a server.
176The default implementation always return true.
177\end{funcdesc}
178
Fred Drakebe2b6d71998-03-14 06:40:34 +0000179The request handler class must define a new \method{handle()} method,
180and can override any of the following methods. A new instance is
181created for each request.
Guido van Rossum6181e001997-05-19 19:55:16 +0000182
183\begin{funcdesc}{finish}{}
Fred Drakebe2b6d71998-03-14 06:40:34 +0000184Called after the \method{handle()} method to perform any clean-up
185actions required. The default implementation does nothing. If
186\method{setup()} or \method{handle()} raise an exception, this
187function will not be called.
Guido van Rossum6181e001997-05-19 19:55:16 +0000188\end{funcdesc}
189
190\begin{funcdesc}{handle}{}
191This function must do all the work required to service a request.
192Several instance attributes are available to it; the request is
Fred Drakebe2b6d71998-03-14 06:40:34 +0000193available as \member{self.request}; the client address as
Guido van Rossumda30f4c1998-11-16 19:07:04 +0000194\member{self.client_address}; and the server instance as
Fred Drakebe2b6d71998-03-14 06:40:34 +0000195\member{self.server}, in case it needs access to per-server
196information.
Guido van Rossum6181e001997-05-19 19:55:16 +0000197
Fred Drakebe2b6d71998-03-14 06:40:34 +0000198The type of \member{self.request} is different for datagram or stream
199services. For stream services, \member{self.request} is a socket
200object; for datagram services, \member{self.request} is a string.
Guido van Rossum6181e001997-05-19 19:55:16 +0000201However, this can be hidden by using the mix-in request handler
202classes
Fred Drakebe2b6d71998-03-14 06:40:34 +0000203\class{StreamRequestHandler} or \class{DatagramRequestHandler}, which
204override the \method{setup()} and \method{finish()} methods, and
205provides \member{self.rfile} and \member{self.wfile} attributes.
206\member{self.rfile} and \member{self.wfile} can be read or written,
207respectively, to get the request data or return data to the client.
Guido van Rossum6181e001997-05-19 19:55:16 +0000208\end{funcdesc}
209
210\begin{funcdesc}{setup}{}
Fred Drakebe2b6d71998-03-14 06:40:34 +0000211Called before the \method{handle()} method to perform any
212initialization actions required. The default implementation does
213nothing.
Guido van Rossum6181e001997-05-19 19:55:16 +0000214\end{funcdesc}