高并发 python socket send 异步_对于Python中socket.listen()与多线程结合的困惑?
實例代碼
服務器等待客戶端連接的代碼from threading import Thread
from socket import socket, AF_INET, SOCK_STREAM
def echo_server(addr, nworkers):
# Run the server
sock = socket(AF_INET, SOCK_STREAM)
sock.bind(addr)
# 這里設置了listen(5),listen(5)限制了一個時刻服務器最多接收的客戶端。
sock.listen(5)
while True:
client_sock, client_addr = sock.accept()
# 調用echo_client來處理客戶端的連接
t = Thread(target=echo_client, args=(client_sock, client_addr))
t.daemon = True
t.start()
echo_server(('',15000)
服務器處理客戶端的代碼def echo_client(sock, client_addr):
'''
Handle a client connection
'''
print('Got connection from', client_addr)
while True:
msg = sock.recv(65536)
if not msg:
break
sock.sendall(msg)
print('Client closed connection')
sock.close()
問題描述
問題一書中是這樣描述上面這個例子的: 盡管這個也可以工作, 但是它不能抵御有人試圖通過創建大量線程讓你服務器資源枯竭而崩潰的攻擊行為。
但是我不明白的是服務器已經設置了listen(5),這個listen(5)難道不會限制每次只有5個客戶端能夠連接嗎?攻擊者怎么可以創造多個線程?
問題二
對于服務器網絡IO延遲有一點不懂的地方,以上面的代碼段2為例子,網絡IO延遲是不是就是msg = sock.recv(65536)和sock.sendall(msg)中由于網速原因造成的延遲?
總結
以上是生活随笔為你收集整理的高并发 python socket send 异步_对于Python中socket.listen()与多线程结合的困惑?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: invoke 数组_对于反射中的invo
- 下一篇: python编程学习笔记列表_pytho