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

Maciej Stachowiak <mjs@apple.com> Wed, 03 February 2010 01:35 UTC

Return-Path: <mjs@apple.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 B314728C124 for <hybi@core3.amsl.com>; Tue, 2 Feb 2010 17:35:12 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -106.358
X-Spam-Level:
X-Spam-Status: No, score=-106.358 tagged_above=-999 required=5 tests=[AWL=0.241, BAYES_00=-2.599, RCVD_IN_DNSWL_MED=-4, USER_IN_WHITELIST=-100]
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 16zLnRTel-CK for <hybi@core3.amsl.com>; Tue, 2 Feb 2010 17:35:11 -0800 (PST)
Received: from mail-out3.apple.com (mail-out3.apple.com [17.254.13.22]) by core3.amsl.com (Postfix) with ESMTP id CE01428C101 for <hybi@ietf.org>; Tue, 2 Feb 2010 17:35:11 -0800 (PST)
Received: from relay15.apple.com (relay15.apple.com [17.128.113.54]) by mail-out3.apple.com (Postfix) with ESMTP id 564498338762 for <hybi@ietf.org>; Tue, 2 Feb 2010 17:35:52 -0800 (PST)
X-AuditID: 11807136-b7bafae000000e8d-37-4b68d2f8c215
Received: from elliott.apple.com (elliott.apple.com [17.151.62.13]) by relay15.apple.com (Apple SCV relay) with SMTP id 99.4E.03725.8F2D86B4; Tue, 2 Feb 2010 17:35:52 -0800 (PST)
MIME-version: 1.0
Content-transfer-encoding: 7bit
Content-type: text/plain; charset="us-ascii"
Received: from [17.151.86.222] by elliott.apple.com (Sun Java(tm) System Messaging Server 6.3-7.04 (built Sep 26 2008; 32bit)) with ESMTPSA id <0KX800L7MSFREJ40@elliott.apple.com> for hybi@ietf.org; Tue, 02 Feb 2010 17:35:52 -0800 (PST)
From: Maciej Stachowiak <mjs@apple.com>
In-reply-to: <Pine.LNX.4.64.1002020056460.21600@ps20323.dreamhostps.com>
Date: Tue, 02 Feb 2010 17:35:51 -0800
Message-id: <B31833AB-111B-4175-ABD2-B6676F7A3C54@apple.com>
References: <4B62C5FE.8090904@it.aoyama.ac.jp> <4B62E516.2010003@webtide.com> <5c902b9e1001290756r3f585204h32cacd6e64fbebaa@mail.gmail.com> <4B636757.3040307@webtide.com> <8449BE19-3061-4512-B563-02973FBB707B@apple.com> <5c902b9e1001292310l5442d476n8375139f3480671b@mail.gmail.com> <26D406E7-2319-476E-9ADF-80D84200C270@apple.com> <5c902b9e1001292333k79569316lf371938c9aa766@mail.gmail.com> <128BFD31-9835-47B1-B7A9-F20F5CDA8D8C@apple.com> <20100130144936.GD19124@shareable.org> <5c902b9e1001301552n6efb7969o34110373e3ab4945@mail.gmail.com> <4B672C9D.9010205@ericsson.com> <op.u7gy9bag64w2qv@annevk-t60> <96935605-E8B8-4718-B60F-570FD2C199E4@apple.com> <Pine.LNX.4.64.1002012354380.3846@ps20323.dreamhostps.com> <F21A8D9A-1E27-48C8-8818-0BB6872A2CE4@apple.com> <Pine.LNX.4.64.1002020056460.21600@ps20323.dreamhostps.com>
To: Ian Hickson <ian@hixie.ch>
X-Mailer: Apple Mail (2.1077)
X-Brightmail-Tracker: AAAAAQAAAZE=
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: Wed, 03 Feb 2010 01:35:12 -0000

On Feb 1, 2010, at 4:58 PM, Ian Hickson wrote:

> On Mon, 1 Feb 2010, Maciej Stachowiak wrote:
>> On Feb 1, 2010, at 4:00 PM, Ian Hickson wrote:
>>> 
>>> On the client side, I agree in principle (at least to ensure that no 
>>> client-to-server data is lost in a case where the API is used to send 
>>> frames then immediately close the connection). However, what if the 
>>> server never closes its side of the connection, even after the client 
>>> initiates a close? Should we have some sort of timeout?
>>> 
>>> On the server side, I don't think there's any point _requiring_ that 
>>> the server close gracefully. If the server really doesn't care if data 
>>> it just sent is received, e.g. because it knows the client side has 
>>> already GC'ed its WebSocket object, then it should just be able to 
>>> close abruptly.
>> 
>> How can the server possibly know that the client has already GC'd its 
>> WebSocket object, if the server and not the client is the initiator of 
>> the close? (If the client initiates the close, then at least in my 
>> proposal there's no extra work for the server.)
> 
> The server and the client are typically written by the same person. If the 
> client sends a message in the subprotocol saying "ok after this I'm 
> throwing away all references to the object", then the server can know that 
> there's no point sending further data.

Why would the client do that instead of sending a close message (thus making the client the close initiator)? 

Also, just throwing away all references to the object would not make it eligible for GC. Per the API spec, it is protected from GC if the connection is open and the WebSocket still has event listeners. I would say that explicitly closing the client side should send a close message (thus making the client the close initiator), and removing all listeners and dropping all references without closing should lead to GC which should close the connection (thus again making the client the close initiator).

In either case, the client sending an extra "I'm dropping all references" message is extra work for the client and doesn't actually save work for the server, so what's the point?

> I'm not saying this is good practice, I'm just saying that there's no 
> point making such practice non-conforming.


I don't think there is a valid use case for allowing it, and it makes the protocol more complicated to have multiple options.

Regards,
Maciej