Re: [hybi] Reliable message delivery (was Re: Technical feedback.)

Justin Erenkrantz <justin@erenkrantz.com> Sat, 30 January 2010 07:10 UTC

Return-Path: <justin.erenkrantz@gmail.com>
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 F01373A677D for <hybi@core3.amsl.com>; Fri, 29 Jan 2010 23:10:14 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.282
X-Spam-Level:
X-Spam-Status: No, score=-2.282 tagged_above=-999 required=5 tests=[AWL=-0.305, BAYES_00=-2.599, FM_FORGED_GMAIL=0.622]
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 tP4YfheHc5y3 for <hybi@core3.amsl.com>; Fri, 29 Jan 2010 23:10:13 -0800 (PST)
Received: from mail-gx0-f226.google.com (mail-gx0-f226.google.com [209.85.217.226]) by core3.amsl.com (Postfix) with ESMTP id 38EEB3A6405 for <hybi@ietf.org>; Fri, 29 Jan 2010 23:10:13 -0800 (PST)
Received: by gxk26 with SMTP id 26so926365gxk.8 for <hybi@ietf.org>; Fri, 29 Jan 2010 23:10:35 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:sender:received:in-reply-to :references:date:x-google-sender-auth:message-id:subject:from:to:cc :content-type:content-transfer-encoding; bh=PDHj4GiTI4h2tWOR52LZ1jXpX9DUHfOkDtELd6scAj4=; b=uq1xJjyZ4WXnuQtotFHbjYbfxyiMv+9Rs9U3+Fxihj1/tPG1MPtGMKXlIzB8DJWgaa L1Sfdmpkb5YfkJHkBzsIJk3zi2uC+5MMBuI6PjwzK4bkrl05OAqzWO0nwxVwBid6vUm1 ym9mq3R3l/83b7ZJyd0ZBnQWN2WGgv0JDr73k=
DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:sender:in-reply-to:references:date :x-google-sender-auth:message-id:subject:from:to:cc:content-type :content-transfer-encoding; b=fcEtrTskZCBfGv82vt1YaNjmaFxpW2MH2tzZqqjGRxaaKMOCcri22jvYPcydwSMRb5 Ovl9BxVzrsmn6/uHpkxDqOiAv0ej3DEjhJfc8IflPseSTfe9ZUbug5on2Yo2CtxPIc1C XV9H1mDciwa05Gc/zS2v1dxQbVWyuW/3RyzY8=
MIME-Version: 1.0
Sender: justin.erenkrantz@gmail.com
Received: by 10.90.177.9 with SMTP id z9mr1790276age.93.1264835435040; Fri, 29 Jan 2010 23:10:35 -0800 (PST)
In-Reply-To: <8449BE19-3061-4512-B563-02973FBB707B@apple.com>
References: <de17d48e1001280012i2657b587i83cda30f50013e6b@mail.gmail.com> <4B625733.2020907@webtide.com> <6.2.5.6.2.20100128225542.06fa8d68@resistor.net> <Pine.LNX.4.64.1001290817520.22020@ps20323.dreamhostps.com> <4B62C5FE.8090904@it.aoyama.ac.jp> <Pine.LNX.4.64.1001291134350.22020@ps20323.dreamhostps.com> <4B62E516.2010003@webtide.com> <5c902b9e1001290756r3f585204h32cacd6e64fbebaa@mail.gmail.com> <4B636757.3040307@webtide.com> <8449BE19-3061-4512-B563-02973FBB707B@apple.com>
Date: Fri, 29 Jan 2010 23:10:35 -0800
X-Google-Sender-Auth: 660405ae25f169ab
Message-ID: <5c902b9e1001292310l5442d476n8375139f3480671b@mail.gmail.com>
From: Justin Erenkrantz <justin@erenkrantz.com>
To: Maciej Stachowiak <mjs@apple.com>
Content-Type: text/plain; charset="ISO-8859-1"
Content-Transfer-Encoding: quoted-printable
Cc: Hybi <hybi@ietf.org>
Subject: Re: [hybi] Reliable message delivery (was Re: Technical feedback.)
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: Sat, 30 Jan 2010 07:10:15 -0000

On Fri, Jan 29, 2010 at 10:43 PM, Maciej Stachowiak <mjs@apple.com> wrote:
> I think it's a flaw in the WebSocket protocol that you can't be sure what messages were delivered successfully without inventing your own client-level ACK protocol. This seems like a shame because TCP already has per-message ACKs and reliable delivery, but we're actually losing this capability at the higher level.
>
> I'm curious about a couple of things:
>
> 1) Do OS TCP stacks expose enough information to socket-level clients to determine what has definitely been sent when a TCP connection is closed?
>
> 2) Is a TCP-level ack sufficient for this purpose? (Or would clients for reliable message delivery want a full end-to-end ack from the receiving application?)

It depends upon what level of "reliability" you are looking for.  If
you are aiming for the "common" case, the answer to both is "yes".

However, edge cases make the answer "no" - it is quite possible to
have "lost" responses that a server actually sends, but the client
will never see.  Some versions of httpd would aggressively close the
server-side socket "too soon" so that the FIN/ACK cycle happens too
soon and unread data is lost - so httpd has a bunch of logic to hold
off on the close() call until a set time has elapsed so as to minimize
this risk.  (See
https://issues.apache.org/bugzilla/show_bug.cgi?id=35292 for one
description.)

The explicit channel close semantics and ACK process of BWTP is, IMO,
a particularly elegant solution here.

HTH.  -- justin