高并发 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)中由于网速原因造成的延迟?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值