Pyhton学习——Day31

# 服务端和接收端的send和reve没有任何关系,只与协议之间有关系
# 应用程序产生的数据一定会交给操作系统,并由操作系统往外发送
# 发送端什么时候会清空自己的内存?
# 收到接收端的ACK响应以后才会清除自己的缓存
# 粘包的本质在于接收端在缓存接收,不知道从缓存区接收多少
# 粘包的两种情况:1.发送间隔短,数据量小;2.接收数据量过大
# 接收和发送数据一次不要超过8k(8096个字节),否则会失真
# socket的sendall方法,MTU值最多能发送1500Bytes,就是说发送数据大时,按照分段发出再重新组合,分段越大,再组合就越复杂
# 重新组合后接收的数据丢失的可能性就越大
# 解决粘包的思路:在发包之前告诉接收端发出的数据大小
# 解决无法用socket实现并发,需要使用socket server实现并发
# 多线程服务端,可以实现并发,可以同时开启多个任务等待链接,ThreadingTCPServer(tuple格式的(ip+prot),类名)
#详细代码请见Socket_Server_31 Socket_Client_31 Socket_Client_31_1
# socketserver模块介绍
# BaseServer是socket模块内部定义的一个类
# server类:处理链接
# GrandPa Dad Son
# | | |
# BaseServer<--TCPServer---<UDPServer
# BaseServer
# TCPServer
# UDPServer
# UnixStreamServer
# UnixDatagramServer
#######################################################################################################
# request类:处理通信
# BaseRequestHandler
# StreamRuquestHandler 流式传输处理方法
# DatagramRuquestHandler 数据报传输方法
# ForkingMixIn
# Forking:进程,与并发有关,ForkingServer多进程的开销高于多线程
# Threading:线程,与并发有关,
# 对于TCP来说self.ruquest接收到的是coon,
# 对于UDP来说self.request接收到的就是实际的消息
Win a contest, win a challenge
原文地址:https://www.cnblogs.com/pandaboy1123/p/8544592.html