- From: Glenn Adams <glenn@skynav.com>
- Date: Sat, 16 Apr 2011 11:34:49 +0800
- To: Dave Raggett <dsr@w3.org>
- Cc: Mark Watson <watsonm@netflix.com>, "public-web-and-tv@w3.org" <public-web-and-tv@w3.org>
- Message-ID: <BANLkTin2gjUev=re=aqhJNskjqjuwM4mHw@mail.gmail.com>
Re: extending WebSocket, I admit it is a stretch, semantically speaking, but
I was thinking mostly of reuse of the WebSocket API here, as opposed to
reusing or extending WSP itself. It could also be argued that an independent
API would be better; however, going with the initial idea, I had something
like the following in mind (consider this a rough strawman example):
function recvSSDP(/*WebSocket*/ socket, /*SSDPMessage*/ msg) {
// receive incoming SSDP message
var s = msg.startLine;
if ( s.indexOf('NOTIFY') == 0 ) {
// dispatch notification
} else if ( s.indexOf('M-SEARCH') == 0 ) {
// dispatch search
} else if ( s.indexOf('HTTT/1.1') == 0 ) {
// dispatch search response
} else {
// ignore other messages
}
}
function sendSSDP(/*WebSocket*/ socket, /*SSDPMessage*/ msg) {
// transmit outgoing SSDP message if open
if ( socket.readState == s.OPEN ) {
socket.send ( msg.encode() );
}
}
var socket = new WebSocket();
socket.onmessage = function(event) {
recvSSDP ( socket, new SSDPMessage(event.data) );
};
// open UDP socket, protocol 'ssdp'
socket.open ( 'udp://239.255.255.250:1900/', 'ssdp' );
var startLine = 'M-SEARCH * HTTP/1.1';
var headers = {
'HOST' : '239.255.255.250:1900',
'MAN' : '\"ssdp:discover\"',
'MX' : '1',
'ST' : 'ssdp:all'
};
sendSSDP ( socket, new SSDPMessage ( startLine, headers ) );
Note that WebSocket as presently defined does not have a distinct open()
method (as implied above), which creates a race condition between
construction and open, since open may complete prior to onopen being set. I
have used a two-step construct then open above similar to XHR2.
So, the question above is this adequate to support SSDP, and would it be
better to define a new API without reusing WS. My answer to both of these
is: probably (adequate and better to define a new API). If WS were a bit
more generic and not tied to WSP, then it could suffice (provided the open
problem is fixed, and perhaps add a 'base64' sub-protocol to allow send/recv
of arbitrary UDP packet bodies).
G.
On Fri, Apr 15, 2011 at 5:52 PM, Dave Raggett <dsr@w3.org> wrote:
> On Fri, 2011-04-15 at 17:09 +0800, Glenn Adams wrote:
> > If WebSocket were extended to permit send/recv of a UDP
> > multicast/unicast packet, then it should be possible to implement all
> > of UPnP protocol, including SSDP, directly in client side JS via an
> > (extended) WebSocket enabled UA.
>
> The Web Sockets API is designed for bilateral communications. How would
> you suggest modifying it to support multicast and datagram based
> messages?
>
> > The question remains whether it is necessary or useful to define
> > higher level abstraction layers, e.g., a low-level, generic UPnP
> > layer, UPnP service specific layers, etc.
>
> Quite so. This could come later based upon experience by library
> developers with exploring various approaches to defining overarching
> abstractions.
>
> --
> Dave Raggett <dsr@w3.org> http://www.w3.org/People/Raggett
>
>
>
Received on Saturday, 16 April 2011 03:35:40 UTC