【发布时间】:2009-10-04 05:35:02
【问题描述】:
谁能告诉我如何单独使用套接字库编写非阻塞服务器代码。谢谢
【问题讨论】:
标签: python sockets nonblocking
谁能告诉我如何单独使用套接字库编写非阻塞服务器代码。谢谢
【问题讨论】:
标签: python sockets nonblocking
坦率地说,只是不要(除非是为了锻炼)。 Twisted Framework 将为您完成所有与网络相关的事情,因此您只需编写协议而不关心传输层。编写套接字代码并不容易,所以为什么不使用其他人编写和测试的代码。
【讨论】:
为什么要单独使用socket?使用另一个标准库模块asyncore如此要简单得多——如果你不能,至少 非常select!
如果你受限于你的作业条件只能使用socket,那么我希望你至少可以添加threading(或multiprocessing),否则你认真幸运——您可以使用timeout 制作套接字,但是在没有任何其他明显标准库模块(支持异步或线程服务)所需帮助的情况下处理超时套接字是一种确实是一团糟-y...;-)。
【讨论】:
不确定“单独的套接字库”是什么意思 - 你肯定需要标准 Python 库中的其他模块。
最低级别的非阻塞代码是select module。这允许您同时拥有许多客户端连接,并报告其中哪些有待处理的输入。因此,您选择服务器(接受)套接字,以及您已经接受的任何客户端连接。其上的薄层是 asyncore 模块。
【讨论】:
使用 eventlet 或 gevent。它猴子修补现有的库。 socket 模块无需任何更改即可使用。虽然代码看起来是同步的,但它是异步执行的。
【讨论】: