(有没有)python socketserver 相对于常规套接字对象的性能优势?
Posted
技术标签:
【中文标题】(有没有)python socketserver 相对于常规套接字对象的性能优势?【英文标题】:(Are there) PERFORMANCE advantages of python socketserver over regular socket object? 【发布时间】:2011-09-26 06:50:56 【问题描述】:感谢迄今为止有趣的回应。根据上述回答,我稍微改变了我的问题。
猜猜我真正需要知道的是,socketserver 是不是设计用于处理延迟和压力的直接套接字库,即 它是否具有其他机制或特性来证明其隐含的广告状态是合理的作为“服务器”,还是稍微好用一点?
似乎每个人都在推荐 socketserver,但我仍然不完全清楚为什么,而不是 socket。
谢谢!!!
我已经在其中构建了一些服务器程序 基于标准套接字的python 图书馆 http://docs.python.org/library/socket.html
我注意到它们似乎有效 很好,除了没有负载 他们有睡觉的倾向 过了一会儿。我想这可能不是 成为生产中的一个问题(毫无疑问 会有很多其他问题) 但我想知道我是不是 在这里为工作使用正确的代码。
环顾四周,我也看到了蟒蛇 提供了一个 socketserver 库 - http://docs.python.org/library/socketserver.html
socket 库提供了 多听的能力 连接,通常最多 5 个。
根据socketserver页面, 它的服务是同步的,即 阻止,但有人可能支持 通过线程的异步行为。 我确实注意到它有能力 维护一个请求队列,带有一个 默认值最多 5 个请求...所以 可能差别不大。
我也读过 Twisted 运行 引擎盖下的套接字服务器。虽然我 宁愿不陷入野兽 Twisted 的大小,除非它会 值得。
所以我的问题是,是socketserver 比 socket 更健壮? 如果是,为什么?
(你怎么知道的?)
顺便说一句,socketserver 是建立在 python套接字的顶部还是它 完全分开?
最后,如果有人知道,作为奖励 一个人会做错什么 请标准插座“入睡” 也可以随意加入。
哦,我说的是 python 2.x 比 3.x 在这里,如果这使得 区别。
谢谢大家!
jsh
好吧,我没有技术答案,但我已经按照人们的建议实施了 SocketServer,而且它肯定更可靠。如果有人提出低级解释,请告诉我......谢谢!
【问题讨论】:
这是一个迷你框架。 Twisted 是一个完整的框架。是的,它们是建立在彼此之上的。 Python 中的socket
模块只是操作系统本机套接字接口(WinSock、BSD 套接字等)的包装器。任何联网的应用程序,无论是 Python 还是 C++,都最有可能使用这个接口。由于 Python 的 socket
是它的包装器,socketserver
和 Twisted 都使用它。
socketserver
是同步的,除非您混合使用 fork 或线程进程的能力。 Twisted 是异步的,但通常使用select
或epoll
之类的东西来处理它,您不允许套接字阻塞,然后在准备写入或读取时处理套接字。我相信在 Twisted 中有一个使用线程的选项,但是在没有线程的情况下使用它要容易得多。所以,我真的怀疑 Twisted 使用了socketserver
。
【参考方案1】:
socket 模块是一个非常底层的模块,用于发送和接收数据包。如文档中所述,它“提供对 BSD 套接字接口的访问”。
如果你想要更精细的东西,有“socketserver”可以为你处理血淋淋的细节,但是它仍然是相对较低的水平。
除此之外,您还可以找到带有或不带有 CGI 的 HTTP 服务器、XML-RPC 服务器等等。这些是框架,这通常意味着他们的代码调用你的代码。它使事情变得更简单,因为您只需填补一些“空白”即可拥有一个完全正常工作的服务器,但这也意味着您对它的功能的控制要少一些。
如果您只需要 socketserver 的功能,我可能会选择它,除非您出于某种原因想要重新发明***(并且设计新***总是有充分的理由,例如了解它的工作原理)。
【讨论】:
以上是关于(有没有)python socketserver 相对于常规套接字对象的性能优势?的主要内容,如果未能解决你的问题,请参考以下文章
(有没有)python socketserver 相对于常规套接字对象的性能优势?