Python中的非阻塞服务器
有人能告诉我怎么用socket库写一个非阻塞的服务器代码吗?谢谢!
4 个回答
0
我不太明白你说的“仅仅使用socket库”是什么意思——你肯定还需要用到Python标准库里的其他模块。
非阻塞代码的最低层次是select模块。这个模块可以让你同时处理很多客户端的连接,并且告诉你哪些连接有数据需要处理。所以你需要选择服务器的(接收)socket,以及你已经接受的任何客户端连接。在这个基础上,还有一个更简单的模块叫asyncore。
2
为什么只用 socket
呢?其实用其他标准库模块,比如 asyncore
要简单得多——如果不行,至少可以用 select!
如果你的作业要求只能用 socket
,那我希望你至少能加上 threading
(或者 multiprocessing
),否则你真的会很麻烦——虽然可以用 timeout
来创建套接字,但如果没有其他标准库模块的帮助(来支持异步或者多线程服务),处理超时的套接字会变得非常复杂...;-)
5
老实说,别这么做(除非是为了练习)。Twisted框架可以帮你处理所有网络相关的事情,这样你只需要专注于你的协议,而不用担心传输层的细节。写套接字代码可不是件简单的事,那为什么不使用别人已经写好并测试过的代码呢?