如何忽略服务器响应以节省带宽?
我正在用一台服务器每秒钟向另一台服务器发送一些信息。问题是,另一台服务器的回复有几千字节,这样就占用了第一台服务器的带宽(大约一个小时消耗2GB)。我希望能发送请求后就不管回复,甚至不接收回复,以节省带宽。
我用一个小的Python脚本来完成这个任务,使用的是(urllib)。如果有其他工具或者其他语言能只发送请求,我也不介意使用。
3 个回答
1
抱歉,这样说不太合理,而且可能违反了HTTP协议。我觉得这个想法很奇怪,设计上就有问题。要么让远程服务器不发声,要么调整你的应用程序,或者在远程服务器上运行的东西,换成一种更聪明的协议,这样可以减少带宽的使用。其他的做法都很难被认为是有意义的。
2
一个5K的回复其实很小,可能还不到你操作系统标准的TCP窗口大小。这意味着,即使你在发送请求后立刻关闭网络连接,并且只检查回复的前几个字节(以确保请求确实被接收),服务器可能已经把整个答案都发给你了,这些数据包可能已经在网络上或者在你的电脑上了。
如果你无法控制服务器的回复内容(也就是不能减少回复的大小),我能想到的唯一替代方案就是在远程机器上再加一个服务器,等待一个简单的命令,然后在本地执行真正的请求,再把结果代码发回给你。这可以很简单地实现,可能只需要用bash、perl或python,举个例子,可以用netcat或者wget在本地操作。
顺便说一下,你的计算有点奇怪,正如Glenn Maynard在评论中正确指出的那样。
2
对于HTTP请求,你可以选择发送一个HEAD请求,而不是GET或POST请求:
import urllib2
request = urllib2.Request('https://stackoverflow.com/q/5049244/')
request.get_method = lambda: 'HEAD' # override get_method
response = urllib2.urlopen(request) # make request
print response.code, response.url
输出结果
200 https://stackoverflow.com/questions/5049244/how-can-i-ignore-server-response-t
o-save-bandwidth
可以查看这个链接了解更多信息:如何在Python中发送HEAD HTTP请求?