[whatwg] Real-time networking in web applications and games

Hey all,

In continuation of the effort to make browsers a home for real-time
peer to peer applications and games without a plugin, I've done a bit
of digging on the spec.  Currently the spec contains section 4.11.6.2
(Peer-to-peer connections) that appears to present a high-level
peer-to-peer api with separate functionality for peer connection and
transmission of text, images and streamed data interleaved in some
unspecified protocol.  Also referenced from the spec is WebSocket, a
thin-layer protocol presenting what amounts to a simple guaranteed
packet stream between client and server.

For the purposes of discussion there seem to be two distinct issues -
peer introduction, where two clients establish a direct connection via
some trusted third party, and data transmission protocol which could
range from raw UDP to higher-level protocols like XML-RPC over HTTP.

For real-time games, specific concerns include flow control, protocol
overhead and retransmission policy; thus most real-time games
implement custom network protocols atop UDP.  Peer introduction is
also important - responsiveness can often be improved and hosting
bandwidth costs reduced by having peers connect directly.  For other
p2p apps (chat, etc), specific control of flow and data retransmission
may be less (or not) important, but peer introduction is still
relevant.

In reading of the current state of the spec's p2p section, it appears
to be poorly suiting to real-time gaming applications, as well as
potentially over-scoped for specific p2p applications.  To demonstrate
an alternative approach, the initial prototype of the TorqueSocket
plugin now works (build script for OS X only).  The API as spec'd
here: http://github.com/nardo/torque_sockets/raw/master/TorqueSocket_API.txt
now actually functions in the form of an NPAPI plugin.  I recorded a
capture of the javascript test program here:
http://www.youtube.com/watch?v=HijKc5AwYHM if you want to see it in
action without actually building the example.

This leads me to wonder about (1) the viability of including peer
introduction into WebSocket as an alternative to a high-level peer to
peer interface in the spec, (2) including a lower-level unreliable
protocol mode, either as part or distinct from WebSocket, and (3) who,
if anyone, is currently driving the p2p section of the spec.

Any feedback welcome :).

Cheers,
Mark

Received on Monday, 3 May 2010 14:59:19 UTC