Python中的非阻塞服务器

时间:2009-10-04 05:35:03

标签: python sockets nonblocking

有人可以告诉我如何单独使用套接字库来编写非阻塞服务器代码。谢谢

4 个答案:

答案 0 :(得分:5)

坦率地说,就是不要(除非是为了练习)。 Twisted Framework将为您执行与网络相关的所有操作,因此您必须只编写协议而不关心传输层。编写套接字代码并不容易,所以为什么不使用其他人编写和测试的代码。

答案 1 :(得分:2)

为什么单独socket所以使用另一个标准库模块asyncore要简单得多 - 如果不能,那么非常至少select!< / p>

如果你受到家庭作业的限制只能使用socket,那么我希望你至少可以添加threading(或multiprocessing),否则你就是认真运气不好 - 您可以使用timeout创建套接字,但是在没有任何其他明显标准库模块所需的帮助的情况下处理超时套接字(以支持异步或< / strong>线程服务)确实很糟糕 - y ...; - )。

答案 2 :(得分:0)

不确定“套接字库单独”是什么意思 - 你肯定需要标准Python库中的其他模块。

最低级别的非阻止代码是select module。这允许您同时拥有许多客户端连接,并报告哪些客户端有待处理的输入。因此,您既可以选择服务器(接受)套接字,也可以选择已接受的任何客户端连接。顶部的薄层是asyncore模块。

答案 3 :(得分:0)

使用eventlets或gevent。它修补了现有的库。套接字模块可以使用而无需任何更改。虽然代码看起来是同步的,但它是异步执行的。

实施例: http://eventlet.net/doc/examples.html#socket-connect