How can I make a browser to browser (peer to peer) connection?
Here on Stackoverflow are several topics about P2P connections in browsers:
- Will HTML5 allow web apps to make peer-to-peer HTTP connections?
- What techniques are available to do P2P in the browser?
- Does HTML5 Support Peer-to-Peer (and not just WebSockets)
- Can HTML5 Websockets connect 2 clients (browsers) directly without using a server (P2P)
- Is it possible to create peer-to-peer connections in a web browser?
- Do websockets allow for p2p (browser to browser) communication?
- HTML 5 Peer to Peer Video Possibilities?
- Is WebRTC implemented in any browsers yet?
As mentioned in most of the topicts, both 2008 HTML5 working drafts were having a section "Peer-to-peer connections":
- http://www.w3.org/TR/2008/WD-html5-20080122/#peer-to-peer
- http://www.w3.org/TR/2008/WD-html5-20080610/comms.html#peer-to-peer
Since the W3C Working Draft 12 February 2009 the section "Peer-to-peer connections" disappeared. But this P2P connection is not gone. It's back under the name PeerConnection within the WebRTC (Real-Time Communications) specifications:
- http://dev.w3.org/2011/webrtc/editor/webrtc.html#peerconnection (W3C Editor's Draft)
- http://www.whatwg.org/specs/web-apps/current-work/webrtc.html#peerconnection (Since 5th December 2011 forwarded to W3C Editor's Draft)
Since 31 October 2011, the W3C Editor's Draft is an official Working draft:
- http://www.w3.org/TR/2011/WD-webrtc-20111027/#peerconnection
The only implementation of the PeerConnection (UDP based) exists in the modified WebKit by the Ericsson labs (May 2011), which is working quite well. Some patches are in WebKit now (Oct. 2011 -- see updates below!):
- https://labs.ericsson.com/apis/web-real-time-communication/
- https://labs.ericsson.com/developer-community/blog/update-webkit-contributions
Additionally, the WebRTC initiative is a project by Google, Mozilla and Opera. Thus, they are continuing the specification on PeerConnection:
- http://www.webrtc.org/
Probably Chrome (uses WebKit) will be the first major browser supporting WebRTC with PeerConnection:
- http://www.webrtc.org/blog/firststeptowardchromeintegration
- http://groups.google.com/a/chromium.org/group/chromium-dev/browse_thread/thread/95bf1e2e1de852fc
- https://lists.webkit.org/pipermail/webkit-dev/2011-November/018445.html
Since 18th January 2012, Chrome is supporting WebRTC as well. It can be uses in the Dev channel (Windows, OSX, Linux) and the Canary build (Windows and OSX) by enabling it under chrome://flags
. It only only supports MediaStream
like Video and audio and can be tested with several Demos. Transferring application data like String
/ArrayBuffer
/... is not supported until now.
Since 16th March 2012, the WebRTC Editor's Draft separates a "Peer-to-peer Data API" to send and receive generic application data (String
, ArrayBuffer
and Blob
). Chromium wants to implement the Data API soon (10th April 2012).
On April, 3rd, Mozilla published a first working example on WebRTC for Firefox as well.
DataChannel is planned for version 25 of Chrome, behind a flag, meanwhile it can be tested in Firefox Nightly/Aurora (12th December 2012):
- http://updates.html5rocks.com/2012/12/WebRTC-hits-Firefox-Android-and-iOS
2018: DataChannels are still experimental, but available in current versions of Chrome and Firefox:
- https://developer.mozilla.org/en-US/docs/Web/API/RTCDataChannel
Browser to browser communication without a server?
Looks like there may be hope on the horizon: http://www.w3.org/TR/webrtc/
Will HTML5 allow web apps to make peer-to-peer HTTP connections?
Instead of intelligent guesses, here is an informed answer:
HTML 5 plans to allow peer to peer connections from javascript, but these connections WILL NOT BE RAW TCP.
The complete spec can be found at http://dev.w3.org/html5/websockets/
jrh
EDIT: with specific reference to peer to peer connections, check out these links:
- Regarding peer to peer connections: http://www.w3.org/TR/2008/WD-html5-20080122/#peer-to-peer
- Regarding broadcast connections to the local network: http://www.w3.org/TR/2008/WD-html5-20080122/#broadcast
- Regarding TCP connections (in the encoded protocol): http://www.w3.org/TR/2008/WD-html5-20080122/#tcp-connections
- Complete proposed spec: http://www.w3.org/TR/2008/WD-html5-20080122/#network
Its important to note that the capabilities are still being negotiated. It will be nice to be able to create "local chat" web apps :)
jrh
Is it possible to create peer-to-peer connections in a web browser?
Opera Unite allows Peer to peer (basically gives your browser web server, file system and nat-traversal capabilities), but this is Opera only.
Peer to peer communication from browser
You can use webrtc
this library simplifies the management of webrtc connections in js.
Do websockets allow for p2p (browser to browser) communication?
No. Browsers can only initiate WebSockets connections, not receive them. The W3C browser API spec only defines how to start an outbound connection.
You can make an application that would both initiate and accept WebSockets connections, but browsers do not do this.
You might look at Pusher App which you could use to build a WebSockets application with multiple clients. The service provides up to 20 simultaneous WebSockets clients for free (you can pay for higher scaling).
Update:
The WebRTC protocol and API is making rapid progress and allows a Data Channel to be established between two peers (you still may need a STUN/TURN server for the initial NAT traversal and setup).
Is there any way to run a server or peer-to-peer from a browser?
There's Opera Unite but I'm not aware of any cross-browser standardization effort based on that. I think by default it proxies through Opera's servers for DNS, but you can set it up for direct connections.
peer to peer communication between mobile app and pc browser
You've now edited your question to mention P2P. That's quite hard to achieve PHONE TO BROWSER (i.e., by hard I mean 6 to 12 man-months of work - and/or plain not possible). However in MOST situations you can instantly (ie "one line of code on each platform") resolve the problem by using a service like pubnub. Much as nobody has back-ends anymore and everything is just done with parse.com or game center, networking like you mention is now just done with pubunb (or any competitor).
This is an extremely common use case problem - and everyone just uses PubNub as mentioned below or one of its competitors.
These days it couldn't be easier, just use pubnub.com
It's the world's biggest data-messaging service for a reason!
There's essentially no other realistic approach, it's so simple - a few lines of code.
Related Topics
How to Simulate a Click by Using X,Y Coordinates in JavaScript
Html Script Tag: Type or Language (Or Omit Both)
How to Store Arbitrary Data For Some HTML Tags
Sanitize/Rewrite HTML on the Client Side
Removing All Script Tags from HTML With Js Regular Expression
How to Check Whether Google Maps Is Fully Loaded
How to Detect Ctrl+V, Ctrl+C Using JavaScript
Submitting a Form on 'Enter' With Jquery
How Exactly Does ≪Script Defer="Defer"≫ Work
How to Capture the Right-Click Event in JavaScript
How to Scroll to an Element Inside a Div
Persisting the Changes of Range Objects After Selection in Html
How to Call PHP Functions by JavaScript
Html Text-Overflow Ellipsis Detection
How to Apply the Required Attribute to ≪Select≫ Fields in Html5