第二次课程通过模拟登录微信,了解了轮询问和长轮询,通过多进程,多线程,协程等方式实现快速的爬虫。
轮询:我的理解是不断的询问。每隔固定的时间都向服务器发送请求,服务器马上返回响应。这种方式可能会有延迟。比如每2秒向服务器发送一个请求,在这2秒之间若有新消息,服务器是不能主动响应给客户端的,只能等下一次客户端向服务器发送请求的时候了。所以最长可能有2秒的时间延迟。
长轮询:也是不断的向服务器发送请求。与轮询不同的是,若没有消息,服务器不马上返回响应。而是将响应hang住一段时间。在这段时间内,一旦有消息,马上返回请求。若没有消息,这段时间结束后返回响应。
长轮询相比轮询的优势在于,长轮询没有延迟。一旦有新消息,服务器会马上响应给客户端。长轮询一般在前端通过ajax实现。轮询和长轮询一般在实时聊天里比较多见。
爬虫是一种IO密集型程序。我们的爬虫程序在发送请求,等待响应的这段时间内,程序就阻塞起来,什么都没有做。大部分时间都在处理IO,很浪费。所以可以利用多进程,多线程,协程等方式并发爬取,提高爬虫的效率。现在有gevent,threading,multiprocess,ascycio等模块提供了封装,可以方便优雅的书写高并发的爬虫程序。
爬虫的本质还是利用socket通信,http协议得好好学啊。http协议是无状态的,事务处理没有记忆能力,服务器不知道客户端是什么状态。即我们给服务器发送 HTTP 请求之后,服务器根据请求,会给我们发送数据过来。但是,发送完,服务器不会记录任何信息。为了标识请求的状态,服务器端出现了session,客户端出现了cookie技术。我们发送请求的时候,需要保持响应的cookie,便于服务器识别发送请求的是谁,请求处在哪个状态。我用微信接收消息的时候,老是不对,不知道是不是cookie出了问题。期待在后面的课程中找出正确答案。
网友评论