一个非阻塞的单线程 HTTP 服务器。
典型的应用程序与 HTTPServer类几乎没有直接交互,除了在进程开始时启动服务器(甚至通常通过tornado.web.Application.listen间接完成)。
在 4.0 版更改:曾经存在于此模块中的 HTTPRequest类已移至 tornado.httputil.HTTPServerRequest。 旧名称保留为别名。
一个非阻塞的单线程 HTTP 服务器。
服务器由 HTTPServerConnectionDelegate
的子类定义,或者为了向后兼容,使用 HTTPServerRequest
作为参数的回调。 委托通常是一个 tornado.web.Application
。
HTTPServer
默认支持keep-alive 连接(对于HTTP/1.1 自动支持,或者在客户端请求Connection: keep-alive
时支持HTTP/1.0)。
如果 xheaders
为 True
,我们支持 X-Real-Ip
/X-Forwarded-For
和 X-Scheme
/X-Forwarded-Proto
标头,它们会覆盖所有请求的远程 IP 和 URI 方案/协议。 在反向代理或负载均衡器后面运行 Tornado 时,这些表头很有用。 如果 Tornado 在未设置受支持的 xheaders
之一的 SSL 解码代理后面运行,则protocol
参数也可以设置为 https
。
默认情况下,在解析 X-Forwarded-For
标头时,Tornado 将选择主机列表中的最后一个(即最近的)地址作为远程主机 IP 地址。 要选择链中的下一个服务器,可以将受信任的下游主机列表作为trusted_downstream
参数传递。 解析 X-Forwarded-For
标头时将跳过这些主机。
要使此服务器为 SSL 流量提供服务,请发送带有 ssl.SSLContext
对象的 ssl_options
关键字参数。 为了与旧版本的 Python 兼容,ssl_options
也可能是 ssl.wrap_socket
方法的关键字参数字典。:
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"))
HTTPServer(application, ssl_options=ssl_ctx)
HTTPServer
初始化遵循以下三种模式之一(初始化方法在 tornado.tcpserver.TCPServer
上定义):
1、listen
:简单的单进程:
server = HTTPServer(app)
server.listen(8888)
IOLoop.current().start()
在许多情况下,可以使用 tornado.web.Application.listen
来避免显式创建 HTTPServer
的需要。
2、bind
/start
:简单的多进程:
server = HTTPServer(app)
server.bind(8888)
server.start(0) # Forks multiple sub-processes
IOLoop.current().start()
使用此接口时,不得将 IOLoop
传递给 HTTPServer
构造函数。 start
将始终在默认单例 IOLoop
上启动服务器。
3、add_sockets
:先进的多进程:
sockets = tornado.netutil.bind_sockets(8888)
tornado.process.fork_processes(0)
server = HTTPServer(app)
server.add_sockets(sockets)
IOLoop.current().start()
add_sockets
接口更复杂,但它可以与 tornado.process.fork_processes
一起使用,以便在分叉发生时给您更多的灵活性。如果您想以除 tornado.netutil.bind_sockets
之外的其他方式创建侦听 sockets,则 add_sockets
也可用于单进程服务器。
在 4.0 版更改:添加了 decompress_request
、chunk_size
、max_header_size
、idle_connection_timeout
、body_timeout
、max_body_size
参数。 添加了对 HTTPServerConnectionDelegate
实例作为 request_callback
的支持。
在 4.1 版更改:HTTPServerConnectionDelegate.start_request
现在使用两个参数(server_conn
,request_conn
)而不是一个(request_conn
)调用。
在 4.2 版更改:HTTPServer
现在是 tornado.util.Configurable
的子类。
在 4.5 版更改: 添加了trusted_downstream
参数。
在 5.0 版更改: io_loop
参数已被删除。
该类的公共接口主要继承自 TCPServer
,并记录在该类下。
关闭所有打开的连接并异步等待它们完成。
此方法与 stop 结合使用以支持清除关闭(尤其是对于单元测试)。 典型用法是首先调用 stop()
停止接受新连接,然后 await close_all_connections()
等待现有连接完成。
此方法当前不会关闭打开的 websocket 连接。
请注意,此方法是协程,必须与 await
一起调用。
到目前为止,您一直在使用常见的数据类型,如:intfloatstrbool但是您也可以使用更复杂的数据类型。您仍然会拥有现在已经看到的相...
缓存的其他问题是数据的隐私和数据应该存储在缓存的级联中的问题。用户通常面临两种缓存:他们自己的浏览器缓存(私有缓存)和他...
Java Swing教程 -Java Swing SpringLayoutjavax.swing包中的SpringLayout类的实例表示一个SpringLayout管理器。在SpringLayout管...
二、运行springboot-freemarker 工程git clone 下载工程springboot-learning-example ,项目地址见 GitHub –https://github.com...
说明:继承自AbstractWrapper,自身的内部属性entity也用于生成where条件及LambdaQueryWrapper,可以通过ne...
什么是MyBatis?MyBatis是一款优秀的持久层框架,它支持自定义SQL、存储过程以及高级映射。MyBatis免除了几乎所有的JDBC代码以及...
配置Hibernate 需要事先知道在哪里找到映射信息,这些映射信息定义了 Java 类怎样关联到数据库表。Hibernate 也需要一套相关数据...
使用JSP最重要的优势之一,就是可以使用所有Java API。本章将会详细地讲述Java中的Date类,它在java.util包下,封装了当前日期和...