ich ein TCP HTTP-Proxy-Server mit urllib,Was der Engpass einer TCP2HTTP (urllib) Proxy ThreadingTcpServer in Python ist
, die einer TCP-Anforderung wandelt in eine HTTP-Anforderung an einen bestimmten Server,
implmented habe es ist so etwas wie folgt aus:
class RequestHandler(socketserver.BaseRequestHandler):
def handle(self):
size, = struct.unpack('L', s.recv(4))
data = s.recv(size)
assert len(data) == size
res = urllib.urlopen('http://myserver.com/', encode_data(data)).read()
s.sendall(res)
s.shutdown(SHUT_WR)
if __name__ == '__main__':
address = ('', 8080)
server = socketserver.ThreadingTCPServer(address, RequestHandler)
server.serve_forever()
Aber es wurde sehr langsam auf vielen Verbindungen (nicht zu viele: etwa 20) zur gleichen Zeit.
Wo ist der Flaschenhals? Ist es mit der GIL-Frage verbunden?
BTW: Ich bin auf Windows so ForkingMixin nicht verfügbar ist hier
@ user522809: Ist nicht das HTTP-Protokoll über TCP-Protokoll. Oder zu sagen, HTTP wäre ein Protokoll auf Anwendungsebene. – pyfunc
@pyfunc: Kein allgemeiner TCP2HTTP-Proxy. Es konvertiert nur bestimmte TCP-Anfragen in entsprechende HTTP-Anfragen. Sie können sagen, HTTP wird hier als Protokoll auf App-Ebene verwendet. – user522809