- From: Mike Belshe <mike@belshe.com>
- Date: Sat, 25 Jan 2014 05:33:18 -0800
- To: Roberto Peon <grmocg@gmail.com>
- Cc: HTTP Working Group <ietf-http-wg@w3.org>
- Message-ID: <CABaLYCsHYt09OdZqVhG0QgBkOSYsQz4mFCMKf_H0JZHV8Sj3bA@mail.gmail.com>
Questions: - is there any existing implementation experience with BLOCKED? - Why can't each side already infer blocked based on the window size being closed? (I do realize the max-conns-reached case could benefit, but I think that is less valuable) I ask because the definition seems unclear. "When an endpoint is blocked on flow control, *but the socket is writable*". What exactly does this mean? If the socket is not writable for 60 seconds, do you send BLOCKED once or more than once? Example 1: - the server has sent a WINDOW_UPDATE, but it is in flight - client flushes enough data that there is 1 byte of space in the socket buffer - send a BLOCKED frame? Example 2: - server sets window to 64KB - client has 65KB to send, so it sends 64KB bytes followed by a BLOCKED? Example 3: - server sets window to 1024 bytes - client immediately sends a BLOCKED - 3 seconds later, you're still blocked, do you send BLOCKED again? Example 4: (perhaps a chatty version of example 1) - server sends WINDOW_UPDATE opening 1 frame of space (1400bytes) - client sends 1400 bytes - client sends BLOCKED - server sends WINDOW_UPDATE opening 1 frame of space (1400bytes) - client sends 1400 bytes - client sends BLOCKED - server sends WINDOW_UPDATE opening 1 frame of space (1400bytes) - client sends 1400 bytes - client sends BLOCKED Overall, I must be misunderstanding, because I think the blocked frame is redundant? Mike On Fri, Jan 24, 2014 at 6:11 PM, Roberto Peon <grmocg@gmail.com> wrote: > I added a new issue for the blocked frame. > > As a reminder, the expectation, based on our implementation experience, is > that flow control and other settings limiting state size are helpful, but > can cause issues with the user experience when tuned improperly, as these > settings invariably are... > Worse, finding bugs in flow control implementations is extremely annoying > and difficult without explicit signaling (Why did the client/server stop > sending us data? What is going on?!) > > A BLOCKED frame helps with both of these issues: > When an endpoint is blocked on flow control, but the socket is writable, > it emits a frame saying so, and the remote end now has explicit signaling > about the tuning of the flow control size. > When you get a BLOCKED frame, if you didn't expect the other side to be > blocked (i.e. you believe the window isn't closed), you can log the fact > for investigation. > > Flow control is the current most-common (and arguably the most important) > use for BLOCKED, but an endpoint can also be blocked on the max-concurrency > limit, e.g. 10 max connections for gmail. It would be extremely helpful to > know how often this is occurring so as to tune these parameters. > > -=R >
Received on Saturday, 25 January 2014 13:33:45 UTC