tornado.netutil.bind_sockets
时间: 2023-09-23 11:13:11 浏览: 240
`tornado.netutil.bind_sockets` 是 Tornado 框架中的一个方法,用于创建一个或多个监听套接字。它的函数签名如下:
```python
def bind_sockets(port, address=None, family=socket.AF_UNSPEC, backlog=128, flags=None, reuse_port=False):
```
其中,参数含义如下:
- `port`: 监听端口号,可以是一个整数或者字符串形式的端口号。
- `address`: 监听地址,默认为 `None`,表示监听所有可用的网络接口。
- `family`: 套接字地址族,默认为 `socket.AF_UNSPEC`,表示自动选择 IPv4 或 IPv6。
- `backlog`: 监听队列的最大长度,默认为 128。
- `flags`: 传递给 `socket()` 函数的额外标志,默认为 `None`。
- `reuse_port`: 是否开启 SO_REUSEPORT 选项,用于多进程共享端口,默认为 `False`。
`bind_sockets` 方法会创建一个或多个监听套接字,并返回一个包含这些套接字的列表。这些套接字可以直接传递给 Tornado 服务器的 `HTTPServer` 对象,例如:
```python
import tornado.ioloop
import tornado.web
import tornado.httpserver
import tornado.netutil
class MainHandler(tornado.web.RequestHandler):
def get(self):
self.write("Hello, world")
if __name__ == "__main__":
app = tornado.web.Application([(r"/", MainHandler)])
sockets = tornado.netutil.bind_sockets(8888)
server = tornado.httpserver.HTTPServer(app)
server.add_sockets(sockets)
tornado.ioloop.IOLoop.current().start()
```
上面的代码中,我们通过 `tornado.netutil.bind_sockets(8888)` 创建了一个监听套接字,并将其传递给了 `HTTPServer` 对象的 `add_sockets` 方法。这样,Tornado 服务器就会监听 8888 端口,并可以处理客户端请求。
需要注意的是,`bind_sockets` 方法会根据参数的不同返回一个或多个套接字,因此在使用时需要根据返回值来进行处理。另外,当需要监听多个端口时,可以多次调用 `bind_sockets` 方法,并将返回的套接字列表传递给 `HTTPServer` 对象的 `add_sockets` 方法。
阅读全文