不想等待 socket.accept() 每次循环迭代



我正在使用"conn, addr = httpSocket.accept(("行,但我不想在我的循环的每次迭代中等待它,因为并不总是有人试图连接。有没有办法检查是否有人正在尝试连接,如果没有,请继续前进?

我已经考虑过使用 asyncio(我不能使用线程,因为这是 esp8266 上的 micropython,不支持线程(,但我的行无法等待。

with open('page.html', 'r') as file:
    html = file.read()
while True:
    conn, addr = httpSocket.accept()
    print('Got a connection from %s' % str(addr))
    conn.send('HTTP/1.1 200 OKn')
    conn.send('Content-Type: text/htmln')
    conn.sendall(html)
    conn.close()

如果线程不是一个选项,您可以随时使用 select 模块。使用 select,您基本上将套接字分为 3 类:

  1. 要从中读取数据的套接字(包括新连接(。

  2. 要向其发送数据的套接字。

  3. 特殊的套接字(通常用于错误检查(。

每次迭代时,选择都会按这些类别返回套接字列表,因此您知道如何处理每个套接字,而不是每次都等待新连接。

您可以在此处查看示例:https://steelkiwi.com/blog/working-tcp-sockets/

最新更新