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

时间:2019-07-20 10:40:40

标签: python python-3.x sockets esp8266 micropython

我正在使用“ 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 OK\n')
    conn.send('Content-Type: text/html\n')
    conn.sendall(html)
    conn.close()

1 个答案:

答案 0 :(得分:1)

如果没有选择线程,则可以始终使用select模块。 使用select,您基本上将套接字分为3类:

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

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

  3. 异常套接字(通常用于错误检查)。

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

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