There are a few classes to simplify server implementation with gevent.
They all share a similar interface, inherited from BaseServer:
def handle(socket, address):
     print('new connection!')
server = StreamServer(('127.0.0.1', 1234), handle) # creates a new server
server.start() # start accepting new connections
At this point, any new connection accepted on 127.0.0.1:1234 will result in a new
gevent.Greenlet spawned running the handle function. To stop a server use BaseServer.stop() method.
In case of a gevent.pywsgi.WSGIServer, handle must be a WSGI application callable.
It is possible to limit the maximum number of concurrent connections,
by passing a gevent.pool.Pool instance. In addition, passing
a pool allows the BaseServer.stop() method to kill requests that
are in progress:
pool = Pool(10000) # do not accept more than 10000 connections
server = StreamServer(('127.0.0.1', 1234), handle, spawn=pool)
server.serve_forever()
Tip
If you don’t want to limit concurrency, but you do want to
be able to kill outstanding requests, use a pool created with
a size of None.
The BaseServer.serve_forever() method calls
BaseServer.start() and then waits until interrupted or until the
server is stopped.
The gevent.pywsgi module contains an implementation of a PEP 3333
WSGI server. In addition,
gunicorn is a stand-alone server that supports gevent.
More examples are available:
Example echoserver.py - demonstrates gevent.server.StreamServer
Example wsgiserver.py - demonstrates gevent.pywsgi.WSGIServer
Example wsgiserver_ssl.py - demonstrates WSGIServer with ssl
Next page: Name Resolution (DNS)