You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@hc.apache.org by "Steffen Pingel (JIRA)" <ji...@apache.org> on 2007/05/15 20:30:16 UTC

[jira] Updated: (HTTPCORE-73) Add notification to NHttpServiceHandler when response has been sent

     [ https://issues.apache.org/jira/browse/HTTPCORE-73?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Steffen Pingel updated HTTPCORE-73:
-----------------------------------

    Description: 
Add a new method to NHttpServiceHandler that notifies the service handler that a response has been sent: 

void responseSubmitted(NHttpServerConnection conn); 

The sent response can be retrieved through conn.getHttpResponse() when the method is invoked. The use case here is that I need to enable and disable throttling per response (which is handled by the underlying NIO layer) and need to know at what point the output buffer for a response has been flushed. The throttling is controlled in the application layer so I need to propagate the event through the layers. 

Such an event notification could also replace NHttpServerConnection.isResponseSubmitted() which currently has an implementation in DefaultNHttpServerConnection that does not match the JavaDoc specification.

  was:
Add a new method to NHttpServiceHandler that notifies the service handler that a response has been sent:

 void responseSubmitted(NHttpServerConnection conn);

The sent response can be retrieved through conn.getHttpResponse() when the method is invoked. The use case here is that I need to enable and disable throttling per response (which is handled by the underlying NIO layer) and need to know at what point the output buffer for a response has been flushed. The throttling is controlled in the application layer so I need to propagate the event through the layers.

Such an event notification could also replace NHttpServerConnection.isResponseSubmitted() which currently has an implementation in DefaultNHttpServerConnection that does not match the JavaDoc specification.





> (1) response head has been submitted and copied to the session buffer

I think that is internal to the implementation of the connection (and the case when DefaultNHttpServerConnection.submitResponse() returns), so I don't think an event is needed here.

My current approach fires the event when the encoder has completed and the session buffer in DefaultNHttpServerConnection has been written to the channel. 

> (2) response head has been written from the session buffer to the underlying
> channel

An explicit event would be nice but I currently assume that when NHttpServiceHandler.outputReady() is invoked that the head has been written and the body is now being processed. 

For HEAD requests an event is fired since NHttpServiceHandler.outputReady() is not invoked.

> (3) response head and response body have been fully written to the underlying
> channel

An event is fired here (in order to switch throttling and to update the UI).

> PS: My guts tell me this one is going to be ugly

In order to get it working cleanly I modified DefaultNHttpServerConnection to process responses sequentially. I have to agree that it would get ugly when it came to keeping track which part of the session buffer maps to which response to fire events accordingly.


> Add notification to NHttpServiceHandler when response has been sent
> -------------------------------------------------------------------
>
>                 Key: HTTPCORE-73
>                 URL: https://issues.apache.org/jira/browse/HTTPCORE-73
>             Project: HttpComponents Core
>          Issue Type: Improvement
>          Components: HttpCore NIO
>    Affects Versions: 4.0-alpha5
>            Reporter: Steffen Pingel
>
> Add a new method to NHttpServiceHandler that notifies the service handler that a response has been sent: 
> void responseSubmitted(NHttpServerConnection conn); 
> The sent response can be retrieved through conn.getHttpResponse() when the method is invoked. The use case here is that I need to enable and disable throttling per response (which is handled by the underlying NIO layer) and need to know at what point the output buffer for a response has been flushed. The throttling is controlled in the application layer so I need to propagate the event through the layers. 
> Such an event notification could also replace NHttpServerConnection.isResponseSubmitted() which currently has an implementation in DefaultNHttpServerConnection that does not match the JavaDoc specification.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


---------------------------------------------------------------------
To unsubscribe, e-mail: httpcomponents-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: httpcomponents-dev-help@jakarta.apache.org