tornado.tcpserver — Basic IOStream-based TCP server¶
- class
TCPServer
(io_loop=None, ssl_options=None, max_buffer_size=None, read_chunk_size=None)[源代码]
A non-blocking, single-threaded TCP server.
To useTCPServer
, define a subclass which overrides the method.
To make this server serve SSL traffic, send thessloptions
keywordargument with anssl.SSLContext
object. For compatibility with olderversions of Pythonssl_options
may also be a dictionary of keywordarguments for the method.:TCPServer
initialization follows one of three patterns:
-
: simple single-process:
server = TCPServer()
server.listen(8888)
IOLoop.current().start()
-
bind/: 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 constructor. start will always startthe server on the default singleton .
-
add_sockets: advanced multi-process:
sockets = bindsockets(8888)
tornado.process.fork_processes(0)
server = TCPServer()
server.add_sockets(sockets)
IOLoop.current().start()
The interface is more complicated, but it can beused with tornado.process.fork_processes to give you moreflexibility in when the fork happens. canalso be used in single-process servers if you want to createyour listening sockets in some way other thanbind_sockets.
3.1 新版功能: Themax_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. takes effect immediately; it is not necessary to callTCPServer.start
afterwards. It is, however, necessary to startthe .
addsockets
(_sockets)[源代码]
Makes this server start accepting connections on the given sockets.
The parameter is a list of socket objects such asthose returned bybind_sockets
. is typically used in combination with thatmethod andtornado.process.fork_processes
to provide greatercontrol over the initialization of a multi-process server.
addsocket
(_socket)¶
Singular version of . 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, callstart
. If you want to run this serverin a single process, you can call as a shortcut to thesequence ofbind
and 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 eithersocket.AF_INET
or to restrict to IPv4 or IPv6 addresses, otherwiseboth will be used if available.
Thebacklog
argument has the same meaning as forsocket.listen
. The argumenthas the same meaning as for .
This method may be called multiple times prior tostart
to listenon multiple ports or interfaces.
在 4.4 版更改: Added thereuse_port
argument.
start
(_num_processes=1)¶
Starts this server in the .
By default, we run the server in this process and do not fork anyadditional child process.
If numprocesses isNone
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 theautoreload=True
option totornado.web.Application
which defaults to True whendebug=True
).When using multiple processes, no IOLoops can be created orreferenced until after the call toTCPServer.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 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 thisTCPServer
is configured for SSL, may be called before the SSL handshake has completed. Use if you need to verify the client’scertificate or use NPN/ALPN.
在 4.2 版更改: Added the option for this method to be a coroutine.