我需要用python套接字类编写简单的http缓存代理(不使用SimpleHTTPServer类)。简单的方案是:
-open socket
-get http message
-check if we have cached resource
-either provide cached resource or re-request it from remote server
-close socket
获取消息时,我使用同步recv方法:
38 message = ""
39 BUF_SIZE = 4096
40 while 1:
41 chunk = connection.recv(BUF_SIZE)
42 if None == chunk or 0 == len(chunk):
43 break
44 message += chunk
45 print "rec %i" % (len(message))
当我使用浏览器连接到我的代理时,浏览器将保持套接字打开,直到它得到响应或我手动取消等待,这完全取决于HTTP的工作方式。所以,我的控制权一直停留在recv。
- 我不能只读1000bytes,因为我不知道实际消息有多大?在http?
中似乎没有任何消息结束标记- 使用同步读取时,程序无法继续打开套接字;
- 我可以使用线程或某种异步api来解决控制阻塞问题,但这并不能解决问题,无法理解何时停止读取请求并开始处理它。