从Google Reader的共享里看到的,忘了是哪位朋友的,先说声感谢!大家虽然都很低调,但是相互之前还是传播了一些有用的信息,其中就包括这个GAppProxy。
GAppProxy,地址:http://code.google.com/p/gappproxy/。具体啥用途,大家可以上去看,看完以后,记得保持低调,在评论中也请小心。请将此告诉你信任的朋友!
我下载来用了一下,不愧是通过Google的服务器,速度就是快。
之前我用自己的SSH作代理,也还行了,但是延迟有200多MS,Google的这个,延迟只有60MS。
想到自己还有近七个Appspot的空间还没有用,于是……我打算根据这个,作一个图形化的Proxy软件,就像著名的-F-R-E-E-G-A-T-E一样。
Google AppSpot每个App有20GB/天的进出带宽,5个的话,就有100GB了,称之为一个超级Proxy一点也不过分。
用Pygtk写一个图形工具,运行后,在预设的服务器中选一个,然后自动设置Firefox的代理,最后回到通知区域待命。哈哈,这不就是-F-R-E-E-G-A-T-E吗?
自从前天发现GAppProxy后,还没怎么去琢磨它。今天大致研究了下它是怎么实现的,然后改造了一下,让它不代理本地的请求。
我主要看了本地端,服务端和本地端可能差不多,是个反转的过程。而且本地端的代码还比服务端多呢。
本地端使用了SocketServer.ThreadingMixIn和BaseHTTPServer.HTTPServer来进行多线程的请求,也就是说,你同时打开几个网页,它都能一起处理。
具体地处理代码在LocalProxyHandler这个类中,把do_GET、do_HEAD和do_POST都定位于统一的do_METHOD,进行http处理。
原理也不是很复杂,主要是把request解析,再重编码(主要是加上压缩特性?)后,发往fetchServer,从fetchServer取得请求数据,然后再写回response中。这应该也是一般代理服务器的运行过程吧。
然后,把下面的代码加到#do path check后面,让它跳过有关向本地内容的请求:
if netloc.startswith('127.0.0.1') or
netloc.startswith('localhost'):
self.wfile.write(urllib2.urlopen(self.path).read())
return
这样弄好后,就可以一直开着Proxy了。在运行本地Web的同时,也可以畅通无阻的上网了。
没有评论:
发表评论