目前,我正在使用内置于python的应用程序。当我在个人计算机上运行它时,它可以正常工作。但是,当我将其移至生产服务器时。它不断向我显示以下错误:我进行了一些研究,得出的原因是,当服务器仍在忙于发送数据时,最终用户浏览器会停止连接。我想知道为什么会发生这种情况,以及导致它在我的个人计算机上运行时阻止它在生产服务器中正常运行的根本原因是什么?任何建议表示赞赏 Exception happened during processing of request from ('127.0.0.1', 34226)Traceback (most recent call last): File "/usr/lib/python2.7/SocketServer.py", line 284, in_handle_request_noblock self.process_request(request, client_address) File "/usr/lib/python2.7/SocketServer.py", line 310, in process_request self.finish_request(request, client_address) File "/usr/lib/python2.7/SocketServer.py", line 323, in finish_request self.RequestHandlerClass(request, client_address, self) File "/usr/lib/python2.7/SocketServer.py", line 641, in __init__ self.finish() File "/usr/lib/python2.7/SocketServer.py", line 694, in finish self.wfile.flush() File "/usr/lib/python2.7/socket.py", line 303, in flush self._sock.sendall(view[write_offset:write_offset+buffer_size])error: [Errno 32] Broken pipe
3 回答

jeck猫
TA贡献1909条经验 获得超7个赞
您的服务器进程已收到SIGPIPE
对套接字的写入。当您写入另一端(客户端)完全关闭的套接字时,通常会发生这种情况。当客户端程序不等到接收到来自服务器的所有数据而只是关闭套接字(使用close
函数)时,可能会发生这种情况。
在C程序中,通常会尝试设置忽略SIGPIPE
信号或为其设置虚拟信号处理程序。在这种情况下,写入关闭的套接字时将返回一个简单的错误。在您的情况下,Python似乎引发了异常,可以将其作为客户端的过早断开连接进行处理。

Helenr
TA贡献1780条经验 获得超4个赞
它取决于您的测试方式,并且可能取决于个人计算机和服务器的TCP堆栈实现上的差异。
例如,如果您sendall
总是在个人计算机上立即(或非常快地)完成操作,则连接在发送过程中可能永远不会中断。如果您的浏览器在同一台计算机上运行,则很有可能(因为没有真正的网络延迟)。
通常,您只需要通过处理异常来解决客户端断开连接之前的情况。
请记住,TCP通信是异步的,但这在物理远程连接上比在本地连接上更为明显,因此在本地工作站上很难再现这种情况。具体而言,单台计算机上的环回连接通常几乎是同步的。
添加回答
举报
0/150
提交
取消