Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python socketserver相对于常规套接字对象是否有性能优势?_Python_Sockets_Asynchronous_Synchronous_Socketserver - Fatal编程技术网

python socketserver相对于常规套接字对象是否有性能优势?

python socketserver相对于常规套接字对象是否有性能优势?,python,sockets,asynchronous,synchronous,socketserver,Python,Sockets,Asynchronous,Synchronous,Socketserver,感谢迄今为止的有趣回复。根据上述回答,我稍微改变了我的问题 猜猜我真正需要知道的是,socketserver与直接的socket库相比,是设计用来处理延迟和压力的,也就是说,它是否有额外的机制或功能来证明其作为“服务器”的隐式广告状态,或者它只是稍微更易于使用 每个人似乎都在推荐socketserver,但我仍然不完全清楚为什么,而不是socket 谢谢 我在中构建了一些服务器程序 基于标准套接字的python 图书馆 我注意到它们似乎起作用了 很好,只是没有负载 他们有睡觉的倾向 过了一会儿

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

猜猜我真正需要知道的是,socketserver与直接的socket库相比,是设计用来处理延迟和压力的,也就是说,它是否有额外的机制或功能来证明其作为“服务器”的隐式广告状态,或者它只是稍微更易于使用

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

谢谢

我在中构建了一些服务器程序 基于标准套接字的python 图书馆

我注意到它们似乎起作用了 很好,只是没有负载 他们有睡觉的倾向 过了一会儿。我想这可能不是 是生产中的一个问题(毫无疑问 还有很多其他问题) 但我想知道我是不是 在这里为作业使用正确的代码

环顾四周,我也看到了那条巨蟒 提供socketserver库-

套接字库提供了 能够倾听多个声音 连接,通常最多5个

根据socketserver页面, 它的服务是同步的,即。 阻塞,但可以支持 通过线程的异步行为。 我注意到它有能力 使用 最多5个请求的默认值…所以 也许没什么不同

我也读过扭曲的跑步 socketserver在引擎盖下。虽然我 宁愿不进入野兽的身体 扭曲的大小,除非它将 值得

所以我的问题是,是socketserver吗 比套接字更健壮?如果是,为什么

(你怎么知道?)

顺便问一下,socketserver是基于 python套接字的顶部,还是它 完全分开

最后,如果有人知道 有什么人会犯这样的错误 请用标准插座“入睡” 你也可以随意插话

哦,我说的是Python2.x 如果这使得 差别

谢谢大家

jsh



嗯,我没有技术上的答案,但我已经按照人们的建议实现了SocketServer,它肯定更可靠。如果有人提出低级解释,请让我知道…谢谢

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

如果您想要更精细的东西,可以使用“socketserver”为您处理血淋淋的细节,但它的级别仍然相对较低

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


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

这是一个微型框架。Twisted是一个完整的框架。是的,它们是相互叠加的。Python中的
socket
模块只是操作系统本机套接字接口(WinSock、BSD套接字等)的包装器。任何网络应用程序,无论是在Python还是C++,都很可能使用这个接口。由于Python的
socket
是一个围绕它的包装器,所以
socketserver
和Twisted都使用它。
socketserver
是同步的,除非混合使用fork或thread进程。Twisted是异步的,但通常通过使用类似于
select
epoll
的方法来处理它,您不允许套接字阻塞,然后在套接字准备好写入或读取时处理它们。我相信在Twisted中使用线程是有选择的,但是在没有线程的情况下使用它要容易得多。所以,我真的怀疑Twisted是否使用了
socketserver