Python 中 TCP2HTTP(urllib) 代理线程TcpServer 的瓶颈是什么

发布于 2024-10-05 00:00:04 字数 708 浏览 1 评论 0原文

我已经使用 urllib 实现了 TCP 到 HTTP 代理服务器,

它将 TCP 请求转换为对特定服务器的 HTTP 请求,

它是这样的:

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()        

但它在许多连接上变得非常慢(不是太多:大约 20 个)时间。

瓶颈在哪里?和GIL问题有关系吗?

顺便说一句:我使用的是 Windows,所以 ForkingMixin 在这里不可用

I have implmented a TCP to HTTP proxy server using urllib,

which converts a TCP request to a HTTP request to a specific server,

It's something like this:

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()        

But it became very slow on many connections(not too many: about 20) at the same time.

Where is the bottleneck? Is it related with GIL issue?

BTW: I'm on Windows so ForkingMixin is not available here

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文