码迷,mamicode.com
首页 > 其他好文 > 详细

性能相关

时间:2018-05-10 11:31:07      阅读:121      评论:0      收藏:0      [点我收藏+]

标签:对象   htm   int   http协议   如何   响应头   数据   nec   面试题   

高性能相关

  - 提高并发:买电脑->写程序->开进程->开线程->单线程

本质:

  浏览器本质,socket客户端遵循Http协议

  HTTP协议本质:通过\r\n分割的规范+ 请求响应之后断开链接   ==  >  无状态、 短连接

具体:

  Http协议是建立在tcp之上的,是一种规范,它规范定了发送的数据的数据格式,然而这个数据格式是通过\r\n 进行分割的,请求头与请求体也是通过2个\r\n分割的,响应的时候,响应头与响应体也是通过\r\n分割,并且还规定已请求已响应就会断开链接   -----即--->  短连接、无状态

url = www.cnblogs.com
    
sk = socket.socket()
# 连接的过程是:阻塞
sk.connect((url,80))

# HTTP协议
content = "GET /wupeiqi HTTP/1.1\r\nHost: %s\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36\r\n\r\n" %url
sk.sendall(content.encode(utf-8))

# 等待服务端返回内容:阻塞
data = sk.recv(8096)
print(data)
sk.close()

IO多路复用

目标:用于监听多个socket对象是否发生变化。

import select 

while True:
    # 让select模块帮助我们去检测sk1/sk2两个socket对象是否已经发生“变化”
    # r=[]
    #       如果r中有值
    #        r=[sk1,]    表示:sk1这个socket已经获取到响应的内容
    #        r=[sk1,sk2] 表示:sk1,sk2两个socket已经获取到响应的内容
    # w=[],如果w中有值
    #        w=[sk1,],   表示:sk1这个socket已经连接成功;
    #        w=[sk1,sk2],表示:sk1/sk2两个socket已经连接成功;
    r,w,e = select.select([sk1,sk2],[sk1,sk2],[],0.5)

面试题:

1. 什么是异步非阻塞?
2. Http协议是什么?
3. 如何提高爬虫的并发?
- 进程
- 线程

性能相关

标签:对象   htm   int   http协议   如何   响应头   数据   nec   面试题   

原文地址:https://www.cnblogs.com/jassin-du/p/9017813.html

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