web服务器上的python反向代理,套接字recv太慢

时间:2016-11-20 13:34:14

标签: python web-services sockets webserver reverse-proxy

我正在尝试为在apache上运行的webserver写一个反向代理 为此,我已经移动了端口8008的web服务器,现在我的计划是在端口80上运行反向代理。为此我编写了一些Python代码。

反向代理代码在端口80上打开一个套接字并等待连接,一旦收到连接请求,它就会分叉一个线程并将连接套接字传递给该线程。 下面是我的代码

class rp_server:
 def __init__(self, mod):
    self.host = Constants.HOST_NAME
    self.port = Constants.RP_PORT
    self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    try:
        self.socket.bind((self.host, self.port))
    except socket.error as e:
        print(str(e))
    settings.mod = mod
    if settings.mod == "reset":
        print("reseting the cache\n")
        exit()
    else:
        self.start_rp_server()

def start_rp_server(self):
    self.socket.listen(5)
    while True:
        print("waiting for a connection")
        (clientsocket, (ip, port)) = self.socket.accept()
        print("connected to : " +ip + ":" + str(port))
        t = ClientThread.ClientThread(ip, port, clientsocket)
        t.start()

start = rp_server(mod)

现在ClientThread的run方法从clientsocket接收消息,在端口8008(我的web服务器正在运行的地方)上创建一个新套接字,将msg发送到从{{{ 1}},接收回复,将回复转发回clientsocket,关闭clientsocket 以下是本部分的代码

clientsocket

现在的问题是,当我尝试在我的浏览器上打开localhost:80页面时,加载时间太长,当我看到一些日志时,我看到了

def run(self):
  data = self.clientsocket.recv(Constants.SKT_BUF_SIZE)
 start = time.time()
    print("creating a socket with web server\n")
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)
    server_address = (Constants.HOST_NAME, Constants.WEB_HOST_PORT)
    sock.connect(server_address)
    sock.send(data)
    try:
        while True:
            print("receiving from web server\n")
            response = sock.recv(Constants.SKT_BUF_SIZE)
            if not response:
                print("end of response\n")
                break

            self.clientsocket.send(response)
    finally:
        sock.close()
        sys.exit()

部分代码需要花费太多时间才能在本地计算机上运行。

有没有更好的方法在python中实现这一点? 实现这一目标的更快的替代方案是什么?理想情况下,反向代理部分应该是无缝的,它应该与普通网站的速度相同,而不需要反向代理。

0 个答案:

没有答案