RTCDataChannel
åºçº¿
广æ³å¯ç¨
*
èª 2020å¹´1æ èµ·ï¼æ¤ç¹æ§å·²å¨ä¸»æµæµè§å¨ä¸å¾å°æ¯æï¼å¯å¨å¤§å¤æ°è®¾å¤åæµè§å¨çæ¬ä¸æ£å¸¸ä½¿ç¨ã
* æ¤ç¹æ§çæäºé¨åçæ¯æç¨åº¦å¯è½ææä¸åã
å®éªæ§: è¿æ¯ä¸é¡¹å®éªæ§ææ¯
å¨å°å
¶ç¨äºç产ä¹åï¼è¯·ä»ç»æ£æ¥æµè§å¨å
¼å®¹æ§è¡¨æ ¼ã
RTCDataChannel æ¥å£ä»£è¡¨å¨ä¸¤è ä¹é´å»ºç«äºä¸ä¸ªååæ°æ®ééçè¿æ¥ã
å¯ä»¥ç¨ RTCDataChannel.createDataChannel() æè
å¨ç°æç RTCPeerConnection ä¸ç¨ RTCDataChannelEvent ç±»åç datachannel äºä»¶æ¥æ¶ï¼åå»ºåº RTCDataChannel ç±»åç对象ã
夿³¨ï¼è¿ä¸ª API å¨ Gecko ä¸è¢«ç§°ä½ DataChannel è䏿¯æ åç'RTCDataChannel'ã
屿§
RTCDataChannel.labelåªè¯»-
è¿åä¸ä¸ªå 嫿æè¿°æ°æ®ééååç
Stringãè¿ä¸ªå段没æå¯ä¸æ§è¦æ±ã RTCDataChannel.orderedåªè¯»-
è¿åä¸ä¸ª
Boolean对象ï¼è¡¨ç¤ºä¼ éä¿¡æ¯çé¡ºåºæ¯å¦æä¿è¯ã RTCDataChannel.protocolåªè¯»-
è¿åä¸ä¸ªå 嫿æ£å¨ä½¿ç¨çååè®®çåç§°ç
Stringï¼å¦ææ²¡æè¿æ ·çååè®®ï¼è¿å"" RTCDataChannel.idåªè¯»-
å½
RTCDataChannel对象被åå»ºåºæ¥çæ¶åï¼è¿åä¸ä¸ªæ ç¬¦å· short ç±»åçæ°æ®ï¼ä½ä¸ºééçæ è¯ idã RTCDataChannel.readyStateåªè¯»-
è¿åæä¸¾ç±»åç RTCDataChannelStateï¼è¡¨ç¤ºæ°æ®è¿æ¥çç¶æï¼æä»¥ä¸å ç§ç±»åï¼
"connecting"è¯¥ç¶æè¡¨ç¤ºåºå±é¾è·¯è¿æªå»ºç«åæ¿æ´»ï¼è¯¥ç¶æè¿æ¯ç±RTCPeerConnection.createDataChannel()çæç datachannel åå§ç¶æã"open"è¯¥ç¶æè¡¨ç¤ºåºå±é¾è·¯å·²ç»è¿æ¥æåå¹¶ä¸è¿è¡ãè¿ä¸ªç¶æè¿æ¯ç±RTCDataChannelEventååç datachannel çåå§ç¶æã"closing"è¯¥ç¶æè¡¨ç¤ºåºå±é¾è·¯å·²ç»å¨å ³éçè¿ç¨ä¸ãè¯¥ç¶æä¸å°ä¸ä¼æ¥åæ°çåéä»»å¡ï¼ä½æ¯ç¼å²éåä¸çæ¶æ¯è¿æ¯ä¼è¢«ç»§ç»åéæè æ¥æ¶ã"closed"è¯¥ç¶æè¡¨ç¤ºåºå±é¾è·¯å·²ç»å®å ¨è¢«å ³éï¼æè æ æ³å¤äº established ç¶æï¼ã
RTCDataChannel.bufferedAmountåªè¯»-
è¿åä¸ä¸ª
unsigned longï¼è¡¨ç¤ºç¼å²éåä¸çå¾ åéçåèæ°ãè¿äºæ°æ®æ¯éè¿RTCDataChannel.send()æ·»å è¿ç¼å²éåä½è¿æªè¢«åéçæ°æ®è¯·æ±ã注æï¼å°±ç® channel å¤äºclosedç¶æï¼éåä¸çç¼åè¿ä¼ä¿æã RTCDataChannel.binaryType-
æ¯ä¸ä¸ª
Stringç±»åï¼è¡¨ç¤ºç±é¾è·¯åéçäºè¿å¶æ°æ®çç±»åã该项çå¼åºè¯¥ä¸º"blob"æè"arraybuffer"ï¼é»è®¤å¼ä¸º"blob"ãå½å¼ä¸º"blob"çæ¶åï¼ä½¿ç¨Blob对象ï¼å½å¼ä¸º"arraybuffer"æ¶ï¼ä½¿ç¨ArrayBuffer对象 RTCDataChannel.maxPacketLifeTypeåªè¯»-
æ¯ä¸ä¸ª
unsigned shortç±»åï¼è¡¨ç¤ºä¸å¯é 模å¼ä¸çæ¶æ¯åéå 许æ¶é´é¿åº¦ï¼åä½ä¸ºæ¯«ç§ã RTCDataChannel.maxRetransmitsåªè¯»-
æ¯ä¸ä¸ª
unsigned shortç±»åï¼è¡¨ç¤ºä¸å¯é 模å¼ä¸æ¶æ¯å 许å°è¯éåçæå¤§æ¬¡æ°ã RTCDataChannel.negotiatedåªè¯»-
æ¯ä¸ä¸ª
Booleanç±»åï¼è¡¨ç¤ºè¿ä¸ª channel æ¯å¦å·²ç»éè¿åºç¨ååã DataChannel.reliableåªè¯»-
æ¯ä¸ä¸ª
Booleanç±»åï¼è¡¨ç¤ºè¿ä¸ªé¾æ¥è½ä¸è½ä»¥éå¯é 模å¼åéæ¶æ¯ãå·²ç»åºå¼ç apiã DataChannel.streamåªè¯»-
å
RTCDataChannel.idçæï¼å·²ç»åºå¼ç apiã
äºä»¶å¤çå¨
RTCDataChannel.onopen-
彿¥æ¶å°
openäºä»¶æ¶çäºä»¶å¤çå¨ï¼å½åºå±é¾è·¯æ°æ®ä¼ è¾æåï¼ç«¯å£ç¶æå¤äº established çæ¶åä¼è§¦å该äºä»¶ã RTCDataChannel.onmessage-
彿¥æ¶å°
messageäºä»¶æ¶çäºä»¶å¤çå¨ãå½ææ°æ®è¢«æ¥æ¶çæ¶åä¼è§¦å该äºä»¶ã RTCDataChannel.onclose-
彿¥æ¶å°
closeäºä»¶æ¶åçäºä»¶å¤çå¨ãå½åºå±é¾è·¯è¢«å ³éçæ¶åä¼è§¦å该äºä»¶ã RTCDataChannel.onerror-
彿¥æ¶å°
erroräºä»¶æ¶åçäºä»¶å¤çå¨ãå½éå°éè¯¯çæ¶åä¼è§¦å该äºä»¶ã
æ¹æ³
RTCDataChannel.close()-
å ³é channel çæ¹æ³ãè¿ä¸ªå ³éå¨ä½ä¸æ¯ç´æ¥çæçãè¿ä¸ªæ¹æ³ä¼å° channel ç
state屿§è®¾ç½®ä¸º"closing"ç¶æï¼å¨æ¶æ¯éåä¸çæ¶æ¯å ¨é¨åé宿¯ä¹åï¼channel æä¼è¢«å ³éã RTCDataChannel.send()-
å°åæ°ä¸çæ°æ®éè¿ channel åéãè¿ä¸ªæ°æ®å¯ä»¥æ¯
String,Blob,ArrayBufferæè æ¯ArrayBufferViewç±»åã
示ä¾
var pc = new RTCPeerConnection();
var dc = pc.createDataChannel("my channel");
dc.onmessage = function (event) {
console.log("received: " + event.data);
};
dc.onopen = function () {
console.log("datachannel open");
};
dc.onclose = function () {
console.log("datachannel close");
};
è§è
| è§è |
|---|
| WebRTC: Real-Time Communication in Browsers > # rtcdatachannel > |