Re: [hybi] Framing take IV

Jamie Lokier <jamie@shareable.org> Thu, 05 August 2010 02:18 UTC

Return-Path: <jamie@shareable.org>
X-Original-To: hybi@core3.amsl.com
Delivered-To: hybi@core3.amsl.com
Received: from localhost (localhost [127.0.0.1]) by core3.amsl.com (Postfix) with ESMTP id 053F73A6AA4 for <hybi@core3.amsl.com>; Wed, 4 Aug 2010 19:18:22 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.517
X-Spam-Level:
X-Spam-Status: No, score=-2.517 tagged_above=-999 required=5 tests=[AWL=0.082, BAYES_00=-2.599]
Received: from mail.ietf.org ([64.170.98.32]) by localhost (core3.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id etoYbTZUgYCf for <hybi@core3.amsl.com>; Wed, 4 Aug 2010 19:18:21 -0700 (PDT)
Received: from mail2.shareable.org (mail2.shareable.org [80.68.89.115]) by core3.amsl.com (Postfix) with ESMTP id 0C57D3A6A9E for <hybi@ietf.org>; Wed, 4 Aug 2010 19:18:21 -0700 (PDT)
Received: from jamie by mail2.shareable.org with local (Exim 4.63) (envelope-from <jamie@shareable.org>) id 1Ogq2j-0006WU-S8; Thu, 05 Aug 2010 03:18:49 +0100
Date: Thu, 05 Aug 2010 03:18:49 +0100
From: Jamie Lokier <jamie@shareable.org>
To: Ian Hickson <ian@hixie.ch>
Message-ID: <20100805021849.GA27827@shareable.org>
References: <AANLkTinyrDoG5d_Ur6HVRy=SgMPjLzJtpJ++Ye=1DQdj@mail.gmail.com> <Pine.LNX.4.64.1008040050040.5947@ps20323.dreamhostps.com> <28A6543A-5CA6-42B7-8D2E-F5511EE20008@apple.com> <4C58C2F6.8050608@caucho.com> <Pine.LNX.4.64.1008040132190.5947@ps20323.dreamhostps.com> <4C58C4C8.5020900@caucho.com> <Pine.LNX.4.64.1008040139520.5947@ps20323.dreamhostps.com>
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Disposition: inline
In-Reply-To: <Pine.LNX.4.64.1008040139520.5947@ps20323.dreamhostps.com>
User-Agent: Mutt/1.5.13 (2006-08-11)
Cc: hybi@ietf.org
Subject: Re: [hybi] Framing take IV
X-BeenThere: hybi@ietf.org
X-Mailman-Version: 2.1.9
Precedence: list
List-Id: Server-Initiated HTTP <hybi.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/listinfo/hybi>, <mailto:hybi-request@ietf.org?subject=unsubscribe>
List-Archive: <http://www.ietf.org/mail-archive/web/hybi>
List-Post: <mailto:hybi@ietf.org>
List-Help: <mailto:hybi-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/hybi>, <mailto:hybi-request@ietf.org?subject=subscribe>
X-List-Received-Date: Thu, 05 Aug 2010 02:18:22 -0000

Ian Hickson wrote:
> On Tue, 3 Aug 2010, Scott Ferguson wrote:
> > Ian Hickson wrote:
> > > On Tue, 3 Aug 2010, Scott Ferguson wrote:
> > > > >   I agree. I can't see any benefit to fragmentation over a 
> > > > > variable-size length field for an initial version without 
> > > > > multiplexing. If the variable-size length field is well-designed, 
> > > > > then in the common case where the message size is small it will 
> > > > > only cost one extra branch to read the length. In the rare case 
> > > > > where the message size is large, a variable-size length is easier 
> > > > > to deal with than reassembling fragments, and easier on the 
> > > > > sending side too.
> > > >
> > > > Some of us don't have infinite memory when sending messages.
> > > 
> > > Why do you need infinite memory?
> > 
> > Because we don't know the length of dynamically produced content until 
> > the dynamic process is complete. That's why HTTP added chunking.
> 
> Is this a common case we should expect? What are the use cases for this?
> 
> If this is a rare occurence, then it's probably simplest to support this 
> at the application layer - nothing stops anyone from having a subprotocol 
> that defines the first byte/character of each message as being a 
> "has continuation" byte.
> 
> If this is a common occurance, then we'll be able to tell when people find 
> themselves often implementing this at the application layer, and then we 
> can easily add it at the WebSocket layer at that time (in a few months). 
> We don't need to reserve bits specifically for it today.

Unusually, perhaps, I'm with Ian on this.

As well as the application approach, assuming we get protocol negotiation,
there is nothing to stop defining a new "continuation frame" type.

That would make trivial WS implementation even simpler: They'd just
ignore the negotiation, so wouldn't receive or need to handle
continuation frames.

(I'm really warming to the idea of a super-simple base protocol on
which just about everything we've discussed works as optional
features, ignorable by simple implementations, used by good quality
implementations automatically ("below the API"), and can be defined in
future without necessarily awaiting standardisation to try them out.)

-- Jamie