我想在测试中模拟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请求。
答案 0 :(得分:0)
我意识到我想禁用错误的方法。
服务器使用write_ping发送ping请求,但是 客户端写pong,所以我覆盖_write_frame方法(fin,操作码) 如果opcode!= 0xA,则将控制转发到原始实现。