簡體   English   中英

如何使這個Twisted Python代理更快?

[英]How to make this Twisted Python Proxy faster?

下面的代碼是用於內容過濾的HTTP代理。 它使用GET將當前站點的URL發送到服務器,在那里它處理它並響應。 它運行非常非常非常慢。 關於如何讓它更快的任何想法?

這是代碼:

from twisted.internet import reactor
from twisted.web import http
from twisted.web.proxy import Proxy, ProxyRequest
from Tkinter import *
#import win32api
import urllib2
import urllib
import os
import webbrowser

cwd = os.path.abspath(sys.argv[0])[0]
proxies = {}
user = "zachb"
class BlockingProxyRequest(ProxyRequest):
    def process(self):
        params = {}
        params['Location']= self.uri
        params['User'] = user
        params = urllib.urlencode(params)
        req = urllib.urlopen("http://weblock.zbrowntechnology.info/ProgFiles/stats.php?%s" % params, proxies=proxies)
        resp = req.read()
        req.close()
        if resp == "allow":
            pass
        else:
            self.transport.write('''BLOCKED BY ADMIN!''')
            self.transport.loseConnection()

        ProxyRequest.process(self)

class BlockingProxy(Proxy):
    requestFactory = BlockingProxyRequest
factory = http.HTTPFactory()
factory.protocol = BlockingProxy

reactor.listenTCP(8000, factory)
reactor.run()

任何人都有任何關於如何使這種運行更快的想法? 甚至是更好的寫作方式?

這個代理緩慢的主要原因可能是這三行:

    req = urllib.urlopen("http://weblock.zbrowntechnology.info/ProgFiles/stats.php?%s" % params, proxies=proxies)
    resp = req.read()
    req.close()

一個普通的基於Twisted的應用程序是單線程的。 你必須不遺余力地讓線程參與其中。 這意味着無論何時請求進入,您都會阻止該HTTP請求中的一個並且僅處理該線程。 在此HTTP請求完成之前,不會處理其他請求。

嘗試使用twisted.web.client中的一個API(例如AgentgetPage )。 這些API不會阻止,因此您的服務器將同時處理並發請求。 這應該轉化為更小的響應時間。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM