【发布时间】:2013-01-19 05:03:27
【问题描述】:
如何创建一个带有 twisted 的 tcp 客户端服务器应用程序,服务器也可以在其中发送请求,而不仅仅是回答它们?有点像 p2p 应用程序,但客户端总是启动连接。由于我不知道服务器的请求何时会发生,所以我不知道一旦反应堆启动后我该怎么做。
【问题讨论】:
如何创建一个带有 twisted 的 tcp 客户端服务器应用程序,服务器也可以在其中发送请求,而不仅仅是回答它们?有点像 p2p 应用程序,但客户端总是启动连接。由于我不知道服务器的请求何时会发生,所以我不知道一旦反应堆启动后我该怎么做。
【问题讨论】:
你要问自己的问题是:服务器为什么要发送请求?
大概世界上发生了一些事情会促使服务器发送请求;它不会随意做。即使它是随机的,世界上发生的事情也将是“过去了一些随机的时间”。换句话说,callLater(random(...), doSomething)。
当您使用 Twisted 编写程序时,您首先要设置对事件做出反应的方式。然后你运行反应器 - 即“对事件做出反应的东西” - 永远。您可以随时设置新的方法来响应传入的网络事件(reactor.connectTCP、reactor.listenTCP、reactor.callLater)或拆除现有的等待事件(protocol.loseConnection、port.stopListening、delayedCall.cancel)。您不需要重新启动反应器;事实上,真的,在反应器运行之前你唯一应该做的就是做reactor.callWhenRunning(someFunctionThatListensOrConnects),然后写someFunctionThatListensOrConnects 来做你所有的初始设置。一旦反应器已经运行,该设置就会发生,这表明您不需要提前做任何事情;反应堆完全能够在运行时更改其配置。
如果导致服务器向客户端 B 发送事件的事件是客户端 A 向其发送消息的事实,那么常见问题解答“how do I make input on one connection result in output on another?”会回答您的问题
【讨论】: