Python socketserver相对于普通socket对象有性能优势吗?
谢谢大家之前有趣的回答。根据这些回答,我稍微调整了一下我的问题。
我想我真正想知道的是,socketserver和普通的socket库相比,是否设计得更能应对延迟和压力,也就是说,它是否有额外的机制或功能,能让它作为“服务器”的身份更有说服力,还是说它只是稍微好用一点?
大家似乎都在推荐socketserver,但我还是不太明白为什么要用它,而不是直接用socket。
谢谢大家!!!
我用python基于标准的socket库写了一些服务器程序,http://docs.python.org/library/socket.html
我发现它们工作得还不错,只是没有负载的时候,过一段时间就会“睡着”。我想这在生产环境中可能不是问题(肯定还有很多其他问题),但我想知道我用的代码是否合适。
我看到python还有一个socketserver库,http://docs.python.org/library/socketserver.html
socket库可以监听多个连接,通常最多支持5个。
根据socketserver的介绍,它的服务是同步的,也就是会阻塞,但可以通过线程支持异步行为。我注意到它有维护请求队列的能力,默认最多可以处理5个请求……所以可能差别不大。
我还读到Twisted在底层运行socketserver。不过我不太想碰像Twisted这么复杂的东西,除非真的值得。
所以我的问题是,socketserver比socket更强大吗? 如果是,为什么?
(你是怎么知道的?)
顺便问一下,socketserver是建立在python的socket之上,还是完全独立的?
最后,如果有人知道标准socket为什么会“睡着”,也欢迎分享一下。
哦,我这里说的是python 2.x,而不是3.x,如果这有区别的话。
谢谢大家!
jsh
嗯,我没有技术上的答案,但我按照大家的推荐实现了SocketServer,确实更可靠。如果有人能给出更底层的解释,请告诉我……谢谢!
1 个回答
socket模块是一个非常基础的模块,用来发送和接收数据包。正如文档中所说,它“提供了对BSD套接字接口的访问”。
如果你想要更复杂一点的东西,可以使用“socketserver”,它会帮你处理一些麻烦的细节,但它仍然是相对基础的。
除此之外,你还可以找到一个HTTP服务器,可以选择是否使用CGI,还有一个XML-RPC服务器等等。这些都是框架,通常意味着它们的代码会调用你的代码。这让事情变得简单,因为你只需要填补一些“空白”,就能拥有一个完整的服务器,但这也意味着你对它的控制会少一些。
如果你只需要socketserver的功能,我可能会推荐你使用它,除非你有某种原因想要重新发明轮子(其实总是有很好的理由去设计新的轮子,比如为了理解它是怎么工作的)。