This is an experimental technology
Because this technology's specification has not stabilized, check the compatibility table for usage in various browsers. Also note that the syntax and behavior of an experimental technology is subject to change in future versions of browsers as the specification changes.
The read-only RTCDataChannel
property readyState
returns an enum of type RTCDataChannelState
which indicates the state of the data channel's underlying data connection.
Syntax
var state = aDataChannel.readyState;
Values
A string which is one of the values in the RTCDataChannelState enum, indicating the current state of the underlying data transport.
RTCDataChannelState enum
The RTCDataChannelState
enum defines string constants which reflect the current status of the RTCDataChannel
's underlying data connection.
Constant | Description |
---|---|
"connecting" |
The user agent (browser) is in the process of creating the underlying data transport; that is, whatever network level connection is used to link the two peers together is in the process of being set up. This is the state of a new RTCDataChannel after being created by RTCPeerConnection.createDataChannel() (on the peer which started the connection process). |
"open" |
The underlying data transport has been established and data can be transferred bidirectionally across it. This is the default state of a new RTCDataChannel created by the WebRTC layer when the remote peer created the channel and delivered to the site or app in a datachannel event of type RTCDataChannelEvent . |
"closing" |
The process of closing the underlying data transport has begun. It is no longer possible to queue new messages to be sent, but previously queued messages may still be send or received before entering the "closed" state. |
"closed" |
The underlying data transport has closed, or the attempt to make the connection failed. |
Example
var dataChannel = peerConnection.createDataChannel("File Transfer");
var sendQueue = [];
function sendMessage(msg) {
switch(dataChannel.readyState) {
case "connecting":
console.log("Connection not open; queueing: " + msg);
sendQueue.push(msg);
break;
case "open":
sendQueue.forEach((msg) => dataChannel.send(msg));
break;
case "closing":
console.log("Attempted to send message while closing: " + msg);
break;
case "closed":
console.log("Error! Attempt to send while connection closed.");
break;
}
}
Specifications
Specification | Status | Comment |
---|---|---|
WebRTC 1.0: Real-time Communication Between Browsers The definition of 'RTCDataChannel.readyState' in that specification. |
Working Draft | Initial specification. |
Browser compatibility
Feature | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|
Basic support | (Yes) | 22 (22) [1] | No support | (Yes) | ? |
Feature | Android Webview | Chrome for Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
---|---|---|---|---|---|---|
Basic support | (Yes) | (Yes) | 22.0 (22) [1] | No support | ? | ? |
[1] The interface is called DataChannel
and not RTCDataChannel
in Firefox; however, a binding was added in Firefox 24 which allows either name to be used.