10

感谢迄今为止有趣的回应。根据上述回答,我稍微改变了我的问题。

猜猜我真正需要知道的是,socketserver 与设计用于处理延迟和压力时期的直接套接字库相反,即它是否具有其他机制或功能来证明其作为“服务器”的隐含广告状态是合理的?还是只是更容易使用?

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

谢谢!!!

我已经基于标准套接字库 http://docs.python.org/library/socket.html在 python 中构建了一些服务器程序

我注意到它们似乎工作得很好,只是在没有负载的情况下它们会在一段时间后进入睡眠状态。我想这可能不是生产中的问题(毫无疑问会有很多其他问题),但我知道我是否在这里使用了正确的代码来完成这项工作。

环顾四周,我看到 python 还提供了一个 socketserver 库 - http://docs.python.org/library/socketserver.html

套接字库提供了侦听多个连接的能力,通常最多 5 个。

根据socketserver页面,它的服务是同步的,即阻塞,但可以通过线程支持异步行为。我确实注意到它能够维护一个请求队列,默认值最多为 5 个请求......所以那里可能没有太大区别。

我还读到 Twisted 在后台运行 socketserver。虽然我宁愿不进入 Twisted 大小的野兽,除非它是值得的。

所以我的问题是,socketserver 是否比 socket 更健壮?如果是这样,为什么?

(你怎么知道?)

顺便说一句,socketserver 是建立在 python 的套接字之上还是完全独立的?

最后,作为奖励,如果有人知道有人会做错什么以致标准插座“睡着”,请随时加入。

哦,我在这里说的是 python 2.x 而不是 3.x,如果这有区别的话。

谢谢大家!

jsh


好吧,我没有技术答案,但我已经按照人们的建议实施了 SocketServer,它肯定更可靠。如果有人提出低级解释,请告诉我......谢谢!

4

1 回答 1

10

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

如果你想要更详细的东西,有“socketserver”可以为你处理血腥的细节,它仍然是相对较低的水平。

除此之外,您还可以找到带有或不带有 CGI 的 HTTP 服务器、XML-RPC 服务器等等。这些是框架,这通常意味着他们的代码调用你的代码。它使事情变得更简单,因为您只需要填补一些“空白”即可拥有一个完全正常工作的服务器,但这也意味着您对它的功能的控制要少一些。

如果您只需要 socketserver 的功能,我可能会选择它,除非您出于某种原因想要重新发明轮子(并且设计新轮子总是有充分的理由,例如了解它的工作原理)。

于 2011-07-04T10:54:01.557 回答