tornado.tcpserver — Basic IOStream-based TCP server¶

A non-blocking, single-threaded TCP server.

class tornado.tcpserver.TCPServer(io_loop=None, ssl_options=None, max_buffer_size=None, read_chunk_size=None)[源代码]

A non-blocking, single-threaded TCP server.

To use TCPServer, define a subclass which overrides the handle_streammethod.

To make this server serve SSL traffic, send the ssloptions keywordargument with an ssl.SSLContext object. For compatibility with olderversions of Python ssl_options may also be a dictionary of keywordarguments for the ssl.wrap_socket method.:



  1. ssl_ctx = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH)
    ssl_ctx.load_cert_chain(os.path.join(data_dir, "mydomain.crt"),
    os.path.join(data_dir, "mydomain.key"))
    TCPServer(ssl_options=ssl_ctx)




TCPServer initialization follows one of three patterns:

    -
    listen: simple single-process:



    server = TCPServer()
    server.listen(8888)
    IOLoop.current().start()




    -
    bind/start: simple multi-process:



    server = TCPServer()
    server.bind(8888)
    server.start(0) # Forks multiple sub-processes
    IOLoop.current().start()




    When using this interface, an IOLoop must _not
    be passedto the TCPServer constructor. start will always startthe server on the default singleton IOLoop.

    -
    add_sockets: advanced multi-process:



    sockets = bindsockets(8888)
    tornado.process.fork_processes(0)
    server = TCPServer()
    server.add_sockets(sockets)
    IOLoop.current().start()




    The add_sockets interface is more complicated, but it can beused with tornado.process.fork_processes to give you moreflexibility in when the fork happens. add_sockets canalso be used in single-process servers if you want to createyour listening sockets in some way other thanbind_sockets.


3.1 新版功能: The max_buffer_size argument.

listen(_port, address='')[源代码]

Starts accepting connections on the given port.

This method may be called more than once to listen on multiple ports.listen takes effect immediately; it is not necessary to callTCPServer.start afterwards. It is, however, necessary to startthe IOLoop.
addsockets(_sockets)[源代码]

Makes this server start accepting connections on the given sockets.

The sockets parameter is a list of socket objects such asthose returned by bind_sockets.add_sockets is typically used in combination with thatmethod and tornado.process.fork_processes to provide greatercontrol over the initialization of a multi-process server.
addsocket(_socket)[源代码]

Singular version of add_sockets. Takes a single socket object.
bind(port, address=None, family=0, backlog=128, reuse_port=False)[源代码]

Binds this server to the given port on the given address.

To start the server, call start. If you want to run this serverin a single process, you can call listen as a shortcut to thesequence of bind and start calls.

Address may be either an IP address or hostname. If it’s a hostname,the server will listen on all IP addresses associated with thename. Address may be an empty string or None to listen on allavailable interfaces. Family may be set to either socket.AF_INETor socket.AF_INET6 to restrict to IPv4 or IPv6 addresses, otherwiseboth will be used if available.

The backlog argument has the same meaning as forsocket.listen. The reuseport argumenthas the same meaning as for bind_sockets.

This method may be called multiple times prior to start to listenon multiple ports or interfaces.


在 4.4 版更改: Added the reuse_port argument.

start(_num_processes=1)[源代码]

Starts this server in the IOLoop.

By default, we run the server in this process and do not fork anyadditional child process.

If numprocesses is None or <= 0, we detect the number of coresavailable on this machine and fork that number of childprocesses. If num_processes is given and > 1, we fork thatspecific number of sub-processes.

Since we use processes and not threads, there is no shared memorybetween any server code.

Note that multiple processes are not compatible with the autoreloadmodule (or the autoreload=True option to tornado.web.Applicationwhich defaults to True when debug=True).When using multiple processes, no IOLoops can be created orreferenced until after the call to TCPServer.start(n).
stop()[源代码]

Stops listening for new connections.

Requests currently in progress may still continue after theserver is stopped.
handle_stream(_stream, address)[源代码]

Override to handle a new IOStream from an incoming connection.

This method may be a coroutine; if so any exceptions it raisesasynchronously will be logged. Accepting of incoming connectionswill not be blocked by this coroutine.

If this TCPServer is configured for SSL, handle_streammay be called before the SSL handshake has completed. UseSSLIOStream.wait_for_handshake if you need to verify the client’scertificate or use NPN/ALPN.


在 4.2 版更改: Added the option for this method to be a coroutine.

原文:

https://tornado-zh-cn.readthedocs.io/zh_CN/latest/tcpserver.html