【问题标题】:Proxy Server with Python Twisted带有 Python Twisted 的代理服务器
【发布时间】:2015-02-03 23:55:59
【问题描述】:

我正在尝试编写一个代理服务器来做一些事情:

  1. 从客户端接收数据。
  2. 验证数据。
  3. 将数据转发到服务器。
  4. 从服务器immediately接收数据发送回客户端。

node.js 中,我可以使用server.pipe(client) 执行#4。扭曲中有没有类似的技巧?

我有什么:

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

【问题讨论】:

    标签: python python-2.7 proxy twisted


    【解决方案1】:

    当您构造GateFactory 时,您需要将一个对selfPlayer 实例)的引用传递给它,然后GateFactory 可以在GatebuildProtocol 中创建它们时将它们传递给它的Gate 实例.

    (另外,请考虑直接使用HostnameEndpoint 而不是connectTCP。)

    【讨论】:

    • 我应该如何使用它?
    • 您应该使用它,因为它更快、更灵活。 HostnameEndpoint 将连接到 IPv6 地址和 IPv4,它会正确地支持循环 DNS 之类的东西。 connectTCP 具有特定的签名,但如果您的代码采用端点,您可以将其切换到任何其他类型的端点(例如 TLS,或通过 txtorcon 的 Tor)。
    • 至于如何使用——链接文档提供了示例。
    猜你喜欢
    • 1970-01-01
    • 2012-08-01
    • 1970-01-01
    • 2011-06-09
    • 2013-08-18
    • 2013-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多