【问题标题】:Can I reuse a socket file handle with socket.fromshare?我可以使用 socket.fromshare 重用套接字文件句柄吗?
【发布时间】:2016-11-21 16:32:29
【问题描述】:

我正在编写一个文件缓存服务器来保存 Web 服务器的静态文件的副本。每当 web 服务器中的线程需要一个静态文件时,它都会打开一个到缓存服务器的套接字连接,并将socket.share() 的结果+它想要的文件的名称发送给它。缓存服务器使用socket.share 的结果通过socket.fromshare 访问http 客户端并发送静态文件的内容。然后它关闭它的 http 客户端套接字副本,以及线程与它的连接。

我想知道使用socket.detach 代替socket.close 是否会自动提高性能? socket.detach 的文档是这样说的:

在不真正关闭底层文件描述符的情况下将套接字对象置于关闭状态。文件描述符被返回,并且可以被重复用于其他目的。

当缓存服务器创建新套接字时,我是否必须以某种方式显式使用返回的文件描述符,或者socket 模块是否知道现有的可重用文件描述符?

【问题讨论】:

    标签: python windows sockets python-3.x


    【解决方案1】:

    socket.detach 仅清除 PySocketSockObject 结构上的文件描述符字段。它不以任何方式存储该值,以便模块的其余部分可以知道文件描述符可以重用。

    【讨论】:

      【解决方案2】:

      我不知道为什么:

      1. 您正在使用socket.share 和
      2. 您认为它会提高性能。

      你说你已经在穿线了。 Web 服务器将是 IO 绑定的。您的大部分时间将花在:

      • 在客户端和服务器之间协商 TCP/IP 连接
      • 在磁盘上查找信息(内存?甜蜜,更快!)
      • 从磁盘(内存?)读取并写入套接字

      您应该还在进行改进之前分析您的代码。实际持有量是多少?建立联系?从磁盘读取?发回给客户?

      除非你已经做了一些巨大的改进,否则我很确定实际的 TCP/IP 协商比从磁盘获取信息要快几个数量级快。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-09-21
        相关资源
        最近更新 更多