Re: [hybi] Is it important to know frame length at the start of frame? (was: Re: Discontinuation of mux ...)

Joakim Erdfelt <joakim@intalio.com> Wed, 12 February 2014 13:49 UTC

Return-Path: <joakim@intalio.com>
X-Original-To: hybi@ietfa.amsl.com
Delivered-To: hybi@ietfa.amsl.com
Received: from localhost (ietfa.amsl.com [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 0AA1F1A097A for <hybi@ietfa.amsl.com>; Wed, 12 Feb 2014 05:49:43 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.977
X-Spam-Level:
X-Spam-Status: No, score=-1.977 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, FM_FORGED_GMAIL=0.622, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_LOW=-0.7] autolearn=ham
Received: from mail.ietf.org ([4.31.198.44]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id K45BRJ_S0r_q for <hybi@ietfa.amsl.com>; Wed, 12 Feb 2014 05:49:38 -0800 (PST)
Received: from mail-ea0-f173.google.com (mail-ea0-f173.google.com [209.85.215.173]) by ietfa.amsl.com (Postfix) with ESMTP id A27651A02C6 for <hybi@ietf.org>; Wed, 12 Feb 2014 05:49:38 -0800 (PST)
Received: by mail-ea0-f173.google.com with SMTP id d10so4450187eaj.32 for <hybi@ietf.org>; Wed, 12 Feb 2014 05:49:37 -0800 (PST)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:date :message-id:subject:from:to:cc:content-type; bh=NudZmZQyLL+nRT01Cc1M0k/oO4qoJELoThxIjQvT+N8=; b=iwE77A89nXGBx/EeI9rovBeWg9ly47vX0NLtPUQg58PnS9uc2lqgLTGeRjOe8h9zBm 37CrFbGryNibmUaFlJ7IHOFmbMHQrYrYRXyDWi8ku1vaaHyT+miuK4V1YwSlOb8sGQfh bKx/nWxV1xfYeEv358q5/KuQ2oDK/8aIabV8QesL7kCAGO1h4nW71NYLvMvzoKkfASg8 OuLbiIAJuMowNW0stuEHn4s4m/Up2r6ElZsW6N/7G6uITYEGESTeiHnqxZjjDw5cn8ZB l7jzbQMCH0hOOqAsSEwnJcki5BOsXSWCNanwg6jeEv76yMWMSbGnVZ2R4V7E+vlBa8Lt zC+Q==
X-Gm-Message-State: ALoCoQlC1guu6qL8VjU7Znir2mI+9xIPTEw53/DBZQG0Tk2YPxp6OKVBUoZy2xowIcsMnhxznPpr
MIME-Version: 1.0
X-Received: by 10.15.102.78 with SMTP id bq54mr2327938eeb.94.1392212977309; Wed, 12 Feb 2014 05:49:37 -0800 (PST)
Received: by 10.14.152.202 with HTTP; Wed, 12 Feb 2014 05:49:37 -0800 (PST)
In-Reply-To: <8984EA8D-C6ED-49BF-92C4-113D69121B30@brandedcode.com>
References: <CAH9hSJbf_ABT7ECL9eS=_ADrncX8qBtxZv=uLcdu9_6GUv23Uw@mail.gmail.com> <8984EA8D-C6ED-49BF-92C4-113D69121B30@brandedcode.com>
Date: Wed, 12 Feb 2014 06:49:37 -0700
Message-ID: <CAG4zZZAfB_phXSVku+W+VbGRNMJ3+=9YPw8_dD6zSJr5041iEw@mail.gmail.com>
From: Joakim Erdfelt <joakim@intalio.com>
To: Micheil Smith <micheil@brandedcode.com>
Content-Type: multipart/alternative; boundary="089e016812d4f6f49d04f235d7e6"
Cc: "hybi@ietf.org" <hybi@ietf.org>
Subject: Re: [hybi] Is it important to know frame length at the start of frame? (was: Re: Discontinuation of mux ...)
X-BeenThere: hybi@ietf.org
X-Mailman-Version: 2.1.15
Precedence: list
List-Id: Server-Initiated HTTP <hybi.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/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: Wed, 12 Feb 2014 13:49:43 -0000

For various application level APIs that depend on delivery of complete
messages, the need to know the frame level size at the start of the frame
becomes important for memory management.  Eclipse Jetty uses this
information to implement Java's javax.websocket API for limiting memory
use, along with lower level (WS+HTTP/1.1) protocol validation (close code
1009).

Since this group has a history (now) of making protocol decisions based on
existing public APIs (re Javascript WebSocket), I would entreat the members
here to think about the other public, industry standard, non-javascript,
WebSocket APIs already widely deployed.


--
Joakim Erdfelt <joakim@intalio.com>
webtide.com <http://www.webtide.com/> - intalio.com/jetty
Expert advice, services and support from from the Jetty & CometD experts
eclipse.org/jetty - cometd.org


On Wed, Feb 12, 2014 at 6:34 AM, Micheil Smith <micheil@brandedcode.com>wrote:

> As far as I recall, this was also to enable more efficient reading and
> error checking.
> Prefixing with the frame size means you don't need to scan every byte being
> received in order to find an end of frame delimiter.
>
> This is a particularly useful thing when doing something like upstreaming
> on a
> websocket server, where all you care about is the very start of the
> message,
> and the length, such that you can then just read() N bytes which is the
> size of
> your frame and just write() directly.
>
> In other words, I agree on your reply Takeshi.
>
> - Micheil
>
> On 7 Feb 2014, at 7:30 am, Takeshi Yoshino <tyoshino@google.com> wrote:
>
> > I remember that in early days of the standardization, somebody was
> proposing (*) that we should have a message length field in the first
> fragment to allow for allocating buffer for full message at the beginning.
> >
> > On Thu, Jan 16, 2014 at 3:27 PM, "Martin J. Dürst" <
> duerst@it.aoyama.ac.jp> wrote:
> > On 2014/01/16 15:05, Yutaka Hirano wrote:
> > Hi Joakim,
> >
> > Thanks for the comment.
> >
> > Knowing the size of a frame at the start of the frame, traditional
> > websocket behavior, is desired, as it allows us to fast fail for the 1009
> > (message too big) use case.
> >
> > Do you know how effective it is?
> >
> > Having no prior knowledge of frame size is undesirable to us.
> >
> > On the other hand, the frame sender have more freedom because they don't
> > have to know the size of the frame in front.
> >
> > My understanding of why messages are split into frames was that this
> would allow to start a message without knowing its length. But if you don't
> know the size of a frame before sending it, then the right solution is to
> make it smaller. Frames are just arbitrary pieces of a message.
> >
> > We should be clear if we want to make it able to
> > (a) know the length of WebSocket frame on receiving the header of each
> fragment
> > (b) know the length of WebSocket message on receiving the first fragment
> >
> > As the proposal (*) has been rejected and not in the RFC6455 header, (b)
> is not true even in RFC6455. What Joakim said should be to keep (a) which
> is true now in RFC6455.
> >
> > But if a message is fragmented into smaller frames, we cannot reject
> (and send 1009) the message on receiving the first frame. "Whether we can
> fast-reject a big message on receiving some non-final frame" depends on how
> the peer fragments a message.
> >
> > In some plans discussed in the main thread, it's planned to drop frame
> length info for efficiency. But something else such as the length field of
> HTTP/2.0 DATA frame tells how much data the fragment (when multiple DATAs
> convey a WebSocket frame, each DATA would be called fragments of a frame)
> contains. So, we won't be able to know the length of fragments
> (original/encapsulated WebSocket frames) on receiving each of them, but
> still be able to know the length of sub-fragments (e.g. HTTP/2.0 data
> frames).
> >
> > I think this change is acceptable and shouldn't be considered as
> breaking of RFC6455 semantics. Even in the mux extension I was editing (
> http://tools.ietf.org/html/draft-ietf-hybi-websocket-multiplexing-11), I
> made the same change. The length of the encapsulated frame is unknown until
> receiving all the fragments of the encapsulating message. No one was
> objecting to that when we were discussing the spec, IIRC.
> >
> > _______________________________________________
> > hybi mailing list
> > hybi@ietf.org
> > https://www.ietf.org/mailman/listinfo/hybi
>
> _______________________________________________
> hybi mailing list
> hybi@ietf.org
> https://www.ietf.org/mailman/listinfo/hybi
>