我可以在socket.fromshare中重用套接字文件句柄吗?

时间:2016-07-18 23:21:09

标签: python windows sockets python-3.x

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

我想知道使用socket.detach代替socket.close会自动提高效果吗? socket.detach的文档说明了这一点:

  

将套接字对象置于关闭状态,而不实际关闭基础文件描述符。返回文件描述符,可以重复用于其他目的。

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

我不确定原因:

  1. 您正在使用socket.share
  2. 您认为这会提高效果。
  3. 你说你已经在线程了。 Web服务器将受IO限制。你的大部分时间都花在了:

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

    在进行改进之前,您应 对您的代码进行概要分析。什么是实际持股量?建立连接?从磁盘读取?寄回客户端?

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