Most of the Internet modules we looked at in the last few chapters deal with client-side interfaces such as FTP and Post Office Protocol (POP), or special server-side protocols such as CGI that hide the underlying server itself. If you want to build servers in Python by hand, you can do so either manually or by using higher-level tools.
We explored the sort of code needed to build servers manually
in Chapter 13. Python programs
typically implement servers either by using raw socket calls with
threads, forks, or selects to handle clients in parallel, or by
using the standard library SocketServer
module. As we learned
earlier, this module supports TCP and UDP sockets, in threading and
forking flavors; you provide a class method invoked to communicate
with clients.
Whether clients are handled manually or with Python classes, to serve requests made in terms of higher-level protocols such as FTP, the Network News Transfer Protocol (NNTP), and HTTP, you must listen on the protocol’s port and add appropriate code to handle the protocol’s message conventions. If you go this route, the client-side protocol modules in Python’s standard library can help you understand the message conventions used.
You may also be able to uncover protocol server examples in
the Demos and Tools
directories of the Python source distribution and on the Net at
large (search http://www.python.org or do a
general web search). See prior chapters for more details on writing
socket-based servers. Also see the asyncore
module described ahead for an
asynchronous server class in the standard library based on the
select
system call instead of on
threads or forks.
As an even higher-level interface, Python also comes with the
standard precoded HTTP web protocol server implementations we met in
Chapter 16 and employed in
Chapter 17. This support takes
the form of three standard modules. BaseHTTPServer
implements the server
itself; this class is derived from the standard SocketServer.TCPServer
class. SimpleHTTPServer
and CGIHTTPServer
implement standard handlers
for incoming HTTP requests; the former handles simple web page file
requests, while the latter also runs referenced CGI scripts on the
server machine by forking processes.
Refer to Example 16-1 for a simple script that uses these modules to implement a web server in Python. Run that script on your server machine to start handling web page requests. This assumes that you have appropriate permissions to run such a script, of course; see the Python library manual for more details on precoded HTTP server and request handler modules.
Once you have your server running, you can access it in any
web browser or by using either the Python httplib
module, which implements the
client side of the HTTP protocol, or the Python urllib
module, which provides a file-like
interface to data fetched from a named URL address (see the urllib
examples in Chapters 14, 16, and 17, use a URL of the form
“http://...” to access HTTP documents, and use "http://localhost/..." if the server is running
on the same machine as the client).
Beyond Python’s standard library, the public domain also offers many ways to build servers in Python, including the Twisted system described in Chapter 13 and mentioned in the next section. Open source systems such as Apache provide additional options.
18.119.28.108