Python补丁对象方法

时间:2016-04-22 08:41:21

标签: python reflection websocket tornado

我想在测试中模拟websocket的ping超时。

首先,我试图安静地关闭TCP套接字,但是不可能到期 无论如何都要发送FIN。 iptables不是一种选择。

我使用tornado库来模拟websocket客户端。

我读了如何替换已经实例化的对象中的方法。 它在一个简单的演示中工作,但龙卷风似乎忽略了我的操作。

它可能是什么?

import types

ws.websocket_connect(url, callback=openCallback,
            on_message_callback=messageCallback)

def openCallback(future):
    ws = future.result()
    inst = ws.protocol

    def stub(self, x):
        print "STUB"
    inst.write_ping = types.MethodType(stub, inst, inst.__class__)

没有任何错误,但没有调用存根,客户端仍然回复服务器ping请求。

1 个答案:

答案 0 :(得分:0)

我意识到我想禁用错误的方法。

服务器使用write_ping发送ping请求,但是 客户端写pong,所以我覆盖_write_frame方法(fin,操作码) 如果opcode!= 0xA,则将控制转发到原始实现。