Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Python Twisted的代理服务器_Python_Python 2.7_Proxy_Twisted - Fatal编程技术网

使用Python Twisted的代理服务器

使用Python Twisted的代理服务器,python,python-2.7,proxy,twisted,Python,Python 2.7,Proxy,Twisted,我正在尝试编写一个代理服务器,它可以做以下几件事: 从客户端接收数据 验证数据 将数据转发到服务器 立即从服务器接收数据发送回客户端 在node.js中,我可以使用server.pipe(client)执行#4。在twisted中有类似的技巧吗 我所拥有的: class Player(protocol.Protocol): def __init__(self): self.server_connection = reactor.connectTCP('192.168.2

我正在尝试编写一个代理服务器,它可以做以下几件事:

  • 从客户端接收数据
  • 验证数据
  • 将数据转发到服务器
  • 立即从服务器
    接收数据
    发送回客户端
  • node.js
    中,我可以使用
    server.pipe(client)
    执行#4。在twisted中有类似的技巧吗

    我所拥有的:

    class Player(protocol.Protocol):
    
        def __init__(self):
            self.server_connection = reactor.connectTCP('192.168.254.101', 1000, GateFactory())
    ...
    
    class Gate(protocol.Protocol):
    
        def dataReceived(self, recd):
            print recd
    ...
    
    class GateFactory(protocol.ClientFactory):
    
        def buildProtocol(self):
            return Gate()
    ...
    
    class PlayerFactory(protocol.Factory):
    
        def __init__(self):
            self.players = {}
    
        def buildProtocol(self, addr):
            return Player(self.players)
    
    ...
    
    reactor.listenTCP(1000, PlayerFactory())
    
    我的问题 我通过执行以下操作将数据转发到服务器:

    self.gate_connection.transport.write(packet)
    
    但是我如何从以下方面将响应转发给客户:

    class Gate(protocol.Protocol):
    
        def dataReceived(self, recd):
            print recd
    

    当您构建
    GateFactory
    时,您需要向它传递一个对
    self
    Player
    实例)的引用,
    GateFactory
    buildProtocol
    中创建它的
    Gate
    实例时,它可以传递给它的
    Gate
    实例


    (也请考虑使用,而不是<代码> CONTCTPTC直接)。< /P>我应该如何使用它?您应该使用它,因为它更快,更灵活。code>HostnameEndpoint将连接到IPv6地址以及IPv4,并且它将正确地支持诸如循环DNS之类的功能

    connectTCP
    具有特定的签名,但如果您的代码采用端点,则可以将其切换到任何其他类型的端点(例如TLS或通过txtorcon的Tor)。至于如何使用它,链接文档提供了一个示例。