2011-06-30 20 views
10

感谢迄今为止有趣的回应。鉴于上述回应,我改变了一些问题。(是否)Python套接字服务器比普通套接字对象的性能优势?

猜测我真正需要知道的是socketserver,而不是设计用于处理延迟和压力两个阶段的直接套接字库,即它是否有额外的机制或功能来证明它的隐式公布状态为一个“服务器”,还是只是稍微更容易使用?

大家似乎都在推荐socketserver,但我仍然不完全清楚为什么,而不是socket。

谢谢!!!

我依据的标准插座 库上建立了一些服务器程序在 蟒蛇 http://docs.python.org/library/socket.html

我注意到,他们似乎工作 除了空载 他们有一种倾向就好了过了一段时间去睡 。我猜这可能不是 是生产中的问题(毫无疑问 会有很多其他问题) 但我想知道我是否 使用正确的代码在这里工作。

环顾四周,我看到蟒蛇也 提供了SocketServer的图书馆 - http://docs.python.org/library/socketserver.html

插座库提供侦听多 连接,通常高达5

按照 能力socketserver页面, 其服务是同步的,即 阻塞,但可能有一个支持 通过线程的异步行为。 我没有注意到它有能力 维持一个请求队列,一个 默认值多达5个请求...所以 可能没有太大的区别。

我也读过Twisted在底层运行 socketserver。虽然我 宁可不进入一个野兽 扭曲的大小,除非它是 是值得的。

所以我的问题是,是套接字服务器 比套接字更健壮?如果是这样,为什么?

(你怎么知道的?)

顺便说一句,SocketServer的建立在 顶部Python的插座或者是 完全分开?

最后,作为奖励,如果有人知道 什么人可以做的不对,使得 标准插座“睡着”请 随意附和关于这一点。

哦,我在说python 2.x而不是 比3.x在这里,如果这使得 区别。

谢谢大家!

JSH


嗯,我没有一个技术性的答案,但我实现了每个人的建议的SocketServer,它肯定是更可靠。如果有人想出低级解释请让我知道......谢谢!

+3

这是一个小型框架。 Twisted是一个全功能框架。是的,他们建立在彼此之上。 Python中的“套接字”模块只是OS本地套接字接口(WinSock,BSD套接字等)的封装。任何网络应用程序,无论是Python还是C++,都很可能使用这个接口。由于Python的'socket'是一个包装器,'socketserver'和Twisted都使用它。 – Santa

+1

'socketserver'是同步的,除非您混合使用fork或thread进程的能力。 Twisted是异步的,但通常使用'select'或'epoll'来处理它,在这种情况下,你不允许套接字阻塞,然后在套接字准备写入或读取时处理套接字。我相信在Twisted中可以选择使用线程,但是在没有线程的情况下使用它更容易。所以,我真的怀疑Twisted是否使用'socketserver'。 –

回答

9

套接字模块是一个用于发送和接收数据包的非常低级的模块。如文档中所述,它“提供对BSD套接字接口的访问”。

如果你想要更细致的东西,有“socketserver”,照顾你的血淋淋的细节,它仍然是相对较低的水平。

最重要的是,你可以找到一个HTTP服务器,有或没有CGI,XML-RPC服务器等等。这些是框架,这通常意味着他们的代码调用您的代码。它让事情变得更简单,因为你只需填补一些“空白”即可拥有一台完全有效的服务器,但这也意味着你对它的功能有一点控制。如果你只需要socketserver的功能,除非你想因某种原因重新发明轮子(并且总是有很好的理由来设计新的轮子,例如了解它是如何工作的),否则我可能会使用它。

+1

+1最后一点! –