2011-11-09 56 views
3

我正在构建一个使用Twisted的应用程序,其中服务器包含一些定时器,并且每秒多次通过UDP将定时器值写入客户端。客户端需要能够向服务器发送各种命令(如“暂停计时器1”或“重置计时器2”)以更改发送到客户端的计时器。我看到的问题是,客户端不断记录从服务器接收到的定时器值,所以我不知道如何在没有阻塞的情况下做到这一点。我想要异步执行此操作,而无需使用任何线程。 Twisted提供了大量的异步IO选项,但我真的不确定哪个最合适,因为其中的一些(如basic.LineReceiver协议)在等待用户输入时仍然阻塞。同时使用Twisted记录并执行命令行输入

由于提前, 本

附:这是我的第一篇文章,请让我知道我可以做的任何改进。

回答

1

对于非阻塞标准I/O,可以使用twisted.internet.stdio。这提供了一种备用流,有序,面向连接的传输方式,可以与通常在这种传输方式上运行的任何协议(其他类似传输包括TCP和SSL)一起使用。

参见stdin.py和stdiodemo.py从http://twistedmatrix.com/documents/current/core/examples/

另外,LineReceiver不是“阻塞在等待用户输入的”连接的。这只是一个协议,它甚至不做任何I/O本身。

+0

非常感谢Jean-Paul。我早先看了一下twisted.internet.stdio,但看起来并不像我期待的那样。看起来我仍然有一些关于Twisted的学习方法! –

+0

看起来给出的示例在Windows上不起作用,由于某些原因,Win32Api不断将stdin的值设置为3,将stdout的值设置为7(而不是扭曲的预期0和1)。我将使用'raw_input'和'threads.deferToThread()'来实现一个不同的方法。也许开始在Linux上开发... –