【问题标题】:Writing a p2p client/server app [duplicate]编写 p2p 客户端/服务器应用程序 [重复]
【发布时间】:2013-01-19 05:03:27
【问题描述】:

可能重复:
How to write a twisted server that is also a client?

如何创建一个带有 twisted 的 tcp 客户端服务器应用程序,服务器也可以在其中发送请求,而不仅仅是回答它们?有点像 p2p 应用程序,但客户端总是启动连接。由于我不知道服务器的请求何时会发生,所以我不知道一旦反应堆启动后我该怎么做。

【问题讨论】:

    标签: python twisted


    【解决方案1】:

    你要问自己的问题是:服务器为什么要发送请求?

    大概世界上发生了一些事情会促使服务器发送请求;它不会随意做。即使它是随机的,世界上发生的事情也将是“过去了一些随机的时间”。换句话说,callLater(random(...), doSomething)

    当您使用 Twisted 编写程序时,您首先要设置对事件做出反应的方式。然后你运行反应器 - 即“对事件做出反应的东西” - 永远。您可以随时设置新的方法来响应传入的网络事件(reactor.connectTCPreactor.listenTCPreactor.callLater)或拆除现有的等待事件(protocol.loseConnectionport.stopListeningdelayedCall.cancel)。您不需要重新启动反应器;事实上,真的,在反应器运行之前你唯一应该做的就是做reactor.callWhenRunning(someFunctionThatListensOrConnects),然后写someFunctionThatListensOrConnects 来做你所有的初始设置。一旦反应器已经运行,该设置就会发生,这表明您不需要提前做任何事情;反应堆完全能够在运行时更改其配置。

    如果导致服务器向客户端 B 发送事件的事件是客户端 A 向其发送消息的事实,那么常见问题解答“how do I make input on one connection result in output on another?”会回答您的问题

    【讨论】:

    • 感谢您的回复。我现在明白了很多,但这让我想到了另一个问题:我怎样才能有一个与网络无关的事件,比如一些用户输入或按下的按钮?
    • 您应该将其作为一个单独的问题提出。请务必具体询问您正在使用的 GUI 工具包。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多