web爬虫在read()中下载网页的recv缓冲区应该有多大? 我正在编写一个C++的网络爬虫,想找出一个读取HTTP请求响应的最佳方法。
目前,我正在使用一个1M大小的缓冲区在read()中包含recv消息(read()的计数为4K字节)。这是我想抓取的最大网页大小。然而,这是一种浪费,因此我也在考虑以下其他方法:web爬虫在read()中下载网页的recv缓冲区应该有多大? 我正在编写一个C++的网络爬虫,想找出一个读取HTTP请求响应的最佳方法。,c++,sockets,http,buffer,httprequest,C++,Sockets,Http,Buffer,Httprequest,目前,我正在使用一个1M大小的缓冲区在read()中包含recv消息(read()的计数为4K字节)。这是我想抓取的最大网页大小。然而,这是一种浪费,因此我也在考虑以下其他方法: 在第一轮发送http HEAD请求,并从标头读取内容长度信息。创建一个大小为内容长度的字符数组,然后发送http GET以检索内容。 Q1:如果来自服务器的标题信息没有内容长度怎么办? Q2:这种方法使网络流量加倍。支付这样的开销值得吗 直接发送http GET并使用较小的缓冲区(例如16K字节)。但在接收到所有数据之
Q1:如果来自服务器的标题信息没有内容长度怎么办?
Q2:这种方法使网络流量加倍。支付这样的开销值得吗
Q1:这样,爬虫程序可能需要几次迭代才能完全阅读一个大网页。如果处理作业耗费时间且同时读取多个网页,则来自网络的等待数据是否会超过系统缓冲区并导致数据包丢失
不是在TCP中。这只会导致发送方暂停并浪费时间。Hi EJP感谢您的详细回答。还有两个问题:1。您提到“为什么不在收到时进行处理?”,这里的“处理”是什么意思?它将缓冲区存储到一个单独的容器中,以便以后进行分析/解析工作,还是分析工作本身?2.我得到的减少缓冲区大小的解决方案是:在每个循环中将read()的缓冲区复制到一个灵活的容器中(例如std::string),并在从服务器读取所有数据后在容器上进行分析。这个想法是正确的方向还是有其他更好的范例?谢谢。(1)分析工作本身。(2) 见(1)。开始解析数据的开头不需要数据的结尾。例如,一个编译器,或者一个XML或HTML解析器,可以一次向源文本输入一个字节,每分钟输入一个字节,它仍然会非常满意。你的代码也应该如此。