Http 如何检测用户取消请求

Http 如何检测用户取消请求,http,proxy,node.js,Http,Proxy,Node.js,我正在通过编写一个非常基本的http/web缓存代理来尝试Node.js,并且遇到了一些我还没有设法突破的问题 假设我有一个非常基本的代理功能(侦听请求,将其传输到外部服务器,等待响应,将其传输回客户端),我如何检测客户端(web浏览器)何时取消请求?当用户在其浏览器上单击“停止”/Esc时,浏览器不会向我发送任何“请求”或信息,并且在“响应”连接结束时不会调用附加回调 我的意思是: http.createServer (clientRequest, clientResponse) {

我正在通过编写一个非常基本的http/web缓存代理来尝试Node.js,并且遇到了一些我还没有设法突破的问题

假设我有一个非常基本的代理功能(侦听请求,将其传输到外部服务器,等待响应,将其传输回客户端),我如何检测客户端(web浏览器)何时取消请求?当用户在其浏览器上单击“停止”/Esc时,浏览器不会向我发送任何“请求”或信息,并且在“响应”连接结束时不会调用附加回调

我的意思是:

http.createServer (clientRequest, clientResponse) {  
    var client = http.createClient (port, hostname);
    var request = client.request (method, url, headers);  

    request.addListener ('response', function(response){  
        response.addListener ('data', function(chunk){  
           // forward data to clientResponse..
        }  
        response.addListener ('end', function(){   
           // end clientResponse..  
        }  
    });  
    clientResponse.addListener('end', function(){  
        // this never gets called :(
        // I want it to terminate the request/response created just above  
    }
}

事实证明,我应该绑定到请求的“close”事件,而不是“end”事件。 这确实有道理。
我在这里为可能遇到相同问题的任何其他人发布此消息:

clientResponse.addListener('close', function(){  
    // this gets called when the user terminates his request  
}

您是否考虑过使用类似Socket.IO的WebSocket实现?使用套接字管理(启动/停止)连接非常容易。iOS不应该使用
createServer
be
(serverRequest,serverResponse)
()中的那些参数吗?您应该绑定到
serverRequest
('close'事件,如下所述)。还有,为什么要在服务器请求处理程序中创建客户机?除非您正在调用外部API,否则看起来您的服务器创建了一个内部客户端,当最初从外部客户端(即浏览器)触发时,该客户端会(递归地)调用自身?@Hari:就像我提到的,这是用于代理的。我的目标是接收来自外部客户端(浏览器,我称之为“clientRequest”)的请求,然后分析/修改请求并转发它。因此,在分析/修改/缓存/任何内容之后,我需要创建一个新请求:client.request。所以:clientRequest是来自浏览器的请求,client.request是新转发的请求。我希望这能把事情弄清楚。(这里没有递归!)Thx@Cyclonus。为了清楚起见,我建议它不再是“客户机”请求,而是在服务器接收到请求后变为“服务器”请求。无论如何,最好的名称由您决定,但您所称的
clientResponse
(也称为对客户端或服务器的响应)是由您控制的,因此除非您的代码启动,否则不应对其调用任何事件。我敢肯定,这是您的
clientRequest
,您要绑定到它来检测浏览器取消。你有没有用另一种方式来解决这个问题?@Hari:我需要一些时间才能找到代码(这个问题现在已经有将近2年的历史了:),但我相信我最终会绑定到所有请求和响应的结束事件。我认为绑定到clientRequest以检测用户何时取消其请求可能是正确的,但我仍然需要绑定到所有请求和响应以用于其他目的(日志记录、统计等)。