码迷,mamicode.com
首页 > 编程语言 > 详细

python__系统 : socket_TCP补充,协程

时间:2018-05-27 13:51:39      阅读:297      评论:0      收藏:0      [点我收藏+]

标签:状态   通知   block   服务器   closed   tcp   set   blocking   close   

TCP 三次握手: SYN  -->  SYN+ACK  -->  ACK

四次挥手:  FIN --> ACK (FIN)  --> ACK

TCP十种状态: LISTEN  SYN_SENT  SYN_RECV  ESTABLISHED  FIN_WAIT1 FIN_WAIT2  CLOSE_WAIT  LAST_ACK  TIME_WAIT  CLOSED

MSL: 报文最大生存时间 

4次握手完成连接的关闭,主动关闭连接一方在第3次握手完成后发送了第四次握手的ACK包后就进入了TIME_WAIT状态,必须在此状态上停留两倍的MSL时间,等待2MSL时间主要目的是怕最后一个ACK包对方没收到,那么对方在超时后将重发第三次握手的FIN包,主动关闭端接到重发的FIN包后可以再发一个ACK应答包。

TCP服务器模型 实现的几种方式:  单进程非堵塞: 用 select.setblocking() 把套接字变成非堵塞类型.

用 select 实现 select.select() 可以用轮询的方式去询问哪些套接字有任务.(收发数据,异常)

epoll  : select.epoll() 时间通知机制,效率极大提升

协程 : python 里面的协程模块 greenlet 类似于线程但不等于线程,需要用 greenlet.switch() 手动切换调用协程.

如果想自动切换,那就要用 gevent : gevent把耗时的东西(函数,类) 都重写了一遍.所以只能用它里边的东西才能实现遇到耗时操作时自动切换协程 如 gevent.socket()  ,  gevent.sleep()  , 创建协程 用 gevent.spawn() ,执行协程代码前需要加上一句 gevent.monkey.patch_all() 它会修改代码,重新编译,使得协程像线程一样可以操作.只不过是遇到耗时操作来回切换而已.

 

python__系统 : socket_TCP补充,协程

标签:状态   通知   block   服务器   closed   tcp   set   blocking   close   

原文地址:https://www.cnblogs.com/cccy0/p/9095653.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!