我现在正在使用iPython以交互方式设置Twisted网络。我在iPython中运行的脚本描述了我必须做的最好的事情:
import router, pdb
# creates nodes which encapsulate RandomVector and VectorAdder objects
a = router.LocalNode(router.RandomVector, '/topic/a_c')
b = router.LocalNode(router.RandomVector, '/topic/b_c')
c = router.LocalNode(router.VectorAdder)
c.registerAsListener('/topic/a_c')
c.registerAsListener('/topic/b_c')
def conn():
global a
global b
a.onConnect()
b.onConnect()
router.r.loadOnConnect(conn)
router.STOMPconnect(router.r)
router.reactor.run()
正在发生的事情是conn()被传递给Twisted协议,每次连接丢失时都会运行conn()。
onConnect看起来像这样:
def onConnect(self):
self._lc = LoopingCall(self.advance)
self._lc.start(1)
每当onConnect运行时,我都会收到错误:
TypeError:必须使用RandomVector实例作为第一个参数调用'unbound方法onConnect()(没有任何替代)'
有谁知道为什么会这样?
答案 0 :(得分:2)
我不认为这是一个范围问题。您确定不需要使用:
a = router.LocalNode(router.RandomVector(), '/topic/a_c')
b = router.LocalNode(router.RandomVector(), '/topic/b_c')
即。实例化传递给LocalNode的RandomVector?
此建议由Unboud方法错误消息触发:未绑定方法是链接到类而不是实例/对象的方法。由于您的消息抱怨a.onConnect是一个未绑定的方法,看起来您需要传递实例而不是类。