socket python 收 发 队列 线程_对于Python中socket.listen()与多线程结合的困惑?
實(shí)例代碼
服務(wù)器等待客戶端連接的代碼
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)
# 這里設(shè)置了listen(5),listen(5)限制了一個(gè)時(shí)刻服務(wù)器最多接收的客戶端。
sock.listen(5)
while True:
client_sock, client_addr = sock.accept()
# 調(diào)用echo_client來(lái)處理客戶端的連接
t = Thread(target=echo_client, args=(client_sock, client_addr))
t.daemon = True
t.start()
echo_server(('',15000)
服務(wù)器處理客戶端的代碼
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()
問(wèn)題描述
問(wèn)題一
書(shū)中是這樣描述上面這個(gè)例子的: 盡管這個(gè)也可以工作, 但是它不能抵御有人試圖通過(guò)創(chuàng)建大量線程讓你服務(wù)器資源枯竭而崩潰的攻擊行為。
但是我不明白的是服務(wù)器已經(jīng)設(shè)置了listen(5),這個(gè)listen(5)難道不會(huì)限制每次只有5個(gè)客戶端能夠連接嗎?攻擊者怎么可以創(chuàng)造多個(gè)線程?
問(wèn)題二
對(duì)于服務(wù)器網(wǎng)絡(luò)IO延遲有一點(diǎn)不懂的地方,以上面的代碼段2為例子,網(wǎng)絡(luò)IO延遲是不是就是msg = sock.recv(65536)和sock.sendall(msg)中由于網(wǎng)速原因造成的延遲?
總結(jié)
以上是生活随笔為你收集整理的socket python 收 发 队列 线程_对于Python中socket.listen()与多线程结合的困惑?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: python语言与c语言相比在分支结构上
- 下一篇: 抖音python广告_抖音上好看的小姐姐