卿¬æåä¸ï¼æä»¬å°æ¢è®¨å¦ä½å对çè¿æ¥æ·»å æ°æ®ééï¼ç¶åå¯ä»¥ä½¿ç¨è¯¥ééå®å ¨å°äº¤æ¢ä»»ææ°æ®ï¼å³ï¼æä»¬å¸æäº¤æ¢çä»»ä½ç±»ååæ ¼å¼çæ°æ®ã
夿³¨ï¼ ç±äºææ WebRTC ç»ä»¶é½éè¦ä½¿ç¨å å¯ï¼å æ¤å¨ RTCDataChannel
ä¸ä¼ è¾ç任使°æ®é½ä¼èªå¨ä½¿ç¨æ°æ®æ¥ä¼ è¾å±å®å
¨ï¼DTLSï¼è¿è¡å®å
¨ä¼ è¾ãæå
³æ´å¤ä¿¡æ¯ï¼è¯·åé
ä¸é¢çå®å
¨é¨åã
RTCDataChannel
使ç¨çåºå±æ°æ®ä¼ è¾å¯ä»¥éè¿ä»¥ä¸ä¸¤ç§æ¹å¼ä¹ä¸å建ï¼
datachannel
äºä»¶ï¼ãè¿æ¯ç®åçæ¹å¼ï¼éç¨äºåç§ç¨ä¾ï¼ä½å¯è½ä¸å¤çµæ´»ï¼æ æ³æ»¡è¶³ä½ çéæ±ã让æä»¬é个æ¡ä¾æ¥çï¼é¦å æ¯ç¬¬ä¸ä¸ªï¼ä¹æ¯æå¸¸è§çæ åµã
èªå¨ååé常æ
åµä¸ï¼ä½ å¯ä»¥è®©å¯¹çè¿æ¥æ¥å¤çä¸ºä½ åå RTCDataChannel
è¿æ¥ã为æ¤ï¼è¯·è°ç¨ createDataChannel()
ï¼èä¸ä¸º negotiated
屿§æå®å¼ï¼æè
å°è¯¥å±æ§æå®ä¸º false
ãè¿å°èªå¨è§¦å RTCPeerConnection
æ¥ä¸ºä½ å¤çååï¼ä½¿è¿ç¨å¯¹çæ¹å建ä¸ä¸ªæ°æ®ééï¼å¹¶å°å®ä»¬å¨ç½ç»ä¸è¿æ¥å¨ä¸èµ·ã
createDataChannel()
ç«å³è¿å RTCDataChannel
对象ï¼ä½ å¯ä»¥éè¿çå¬ open
äºä»¶æ¥ç¡®å®è¿æ¥æ¯å¦æå建ç«ã
let dataChannel = pc.createDataChannel("MyApp Channel");
dataChannel.addEventListener("open", (event) => {
beginTransmission(dataChannel);
});
æå¨åå
è¦æå¨ååæ°æ®ééè¿æ¥ï¼ä½ éè¦é¦å
å¨ RTCPeerConnection
ä¸ä½¿ç¨ createDataChannel()
æ¹æ³å建ä¸ä¸ªæ°ç RTCDataChannel
对象ï¼å¹¶å¨é项䏿å®ä¸ä¸ªè®¾ç½®ä¸º true
ç negotiated
屿§ãè¿ä¼å对çè¿æ¥ååºä¿¡å·ï¼åç¥å
¶ä¸è¦ä»£è¡¨ä½ å°è¯ååééã
ç¶åéè¿å¸¦å¤æ¹å¼ååè¿æ¥ï¼ä½¿ç¨ Web æå¡å¨æå
¶ä»ææ®µï¼ãæ¤è¿ç¨åºåè¿ç¨å¯¹çæ¹ååºä¿¡å·ï¼è®©å
¶ä½¿ç¨ç¸åç id
ï¼åæ¶ä¹å° negotiated
屿§è®¾ç½®ä¸º true
ï¼æ¥å建èªå·±ç RTCDataChannel
ãè¿å°éè¿ RTCPeerConnection
å°ä¸¤ä¸ªå¯¹è±¡é¾æ¥èµ·æ¥ã
let dataChannel = pc.createDataChannel("MyApp Channel", {
negotiated: true,
});
dataChannel.addEventListener("open", (event) => {
beginTransmission(dataChannel);
});
requestRemoteChannel(dataChannel.id);
å¨è¿ä¸ªä»£ç çæ®µä¸ï¼å¨å° negotiated
设置为 true
çæ
åµä¸å建éå¥ï¼ç¶å使ç¨ä¸ä¸ªå为 requestRemoteChannel()
ç彿°æ¥è§¦åååï¼ä»¥å建ä¸ä¸ª ID 䏿¬å°ééç¸åçè¿ç¨ééã
éè¿è¿æ ·åï¼ä½ å¯ä»¥ä½¿ç¨ä¸åç屿§ä¸ºæ¯ä¸ªå¯¹çæ¹åå»ºæ°æ®ééï¼å¹¶ä¸å¯ä»¥éè¿ä½¿ç¨ç¸åç id
弿¥å£°æå¼å°å建ééã
WebRTC æ°æ®é鿝æå¯¹ä¼ åºæ°æ®è¿è¡ç¼å²ãè¿æ¯èªå¨å¤ççãè½ç¶æ²¡æåæ³æ§å¶ç¼å²åºç大å°ï¼ä½ä½ å¯ä»¥äºè§£å½åç¼å²çæ°æ®éï¼å¹¶å¯ä»¥éæ©å¨ç¼å²éåä¸çæ°æ®å¼å§åå¾ä¸è¶³æ¶éè¿äºä»¶éç¥ãè¿ä½¿å¾ç¼åææçä¾ç¨åå¾å¾å®¹æï¼ç¡®ä¿å§ç»ææ°æ®åå¤åéï¼èä¸ä¼è¿åº¦ä½¿ç¨å åæå®å ¨èå°½ééã
äºè§£æ¶æ¯å¤§å°éå¶å¯¹äºå¨ç½ç»ä¸ä¼ è¾ç任使°æ®ï¼é½åå¨å¤§å°éå¶ãä»åºæ¬å±é¢ä¸è¯´ï¼å个ç½ç»æ°æ®å ç大å°ä¸è½è¶ è¿ä¸å®çå¼ï¼ç¡®åçæ°å¼åå³äºç½ç»åæä½¿ç¨çä¼ è¾å±ï¼ãå¨åºç¨ç¨åºçº§å«ââå³ï¼å¨ä½ ç代ç è¿è¡ç WebRTC å®ç°ä¸ââWebRTC å®ç°äºæ¯ææ¯ç½ç»ä¼ è¾å±çæå¤§æ°æ®å 大尿´å¤§çæ¶æ¯çç¹æ§ã
è¿å¯è½ä¼ä½¿äºæ
åå¾å¤æï¼å ä¸ºä½ ä¸ä¸å®ç¥éåç§ç¨æ·ä»£çç大å°éå¶ï¼ä»¥åå®ä»¬å¨åéææ¥æ¶è¾å¤§æ¶æ¯æ¶çååºæ¹å¼ãå³ä½¿ç¨æ·ä»£çå
±äº«ç¸åçåºå±åºæ¥å¤çæµæ§å¶ä¼ è¾åè®®ï¼SCTPï¼æ°æ®ï¼ä»ç¶å¯è½å 为åºçä½¿ç¨æ¹å¼è产çå·®å¼ãä¾å¦ï¼Firefox å Google Chrome é½ä½¿ç¨ usrsctp
åºæ¥å®ç° SCTPï¼ä½ä»ç¶ä¼åºç°å å®ä»¬è°ç¨åºçæ¹å¼ä»¥å对å
¶è¿åçé误çååºæ¹å¼ä¸åè导è´å¨ RTCDataChannel
ä¸çæ°æ®ä¼ è¾å¤±è´¥çæ
åµã
å½ä¸¤ä¸ªè¿è¡ Firefox çç¨æ·å¨æ°æ®ééä¸éä¿¡æ¶ï¼æ¶æ¯å¤§å°éå¶è¦æ¯ Firefox å Chrome éä¿¡æ¶è¦å¤§å¾å¤ï¼å 为 Firefox å®ç°äºä¸ç§ç°å·²å¼ç¨çææ¯ï¼ç¨äºå°å¤§æ¶æ¯åæå¤ä¸ª SCTP æ¶æ¯åéï¼è Chrome 没æãChrome å°çå°ä¸ç³»åå®è®¤ä¸ºå®æ´çæ¶æ¯ï¼å¹¶å°å®ä»¬ä½ä¸ºå¤ä¸ªæ¶æ¯ä¼ éç»æ¥æ¶ç RTCDataChannel
ã
å¯ä»¥æ¯«æ é®é¢å°åéå°äº 16 KiB çæ¶æ¯ï¼å 为ææä¸»è¦ç¨æ·ä»£çé½ä»¥ç¸åçæ¹å¼å¤çå®ä»¬ãè¶ åºè¿ä¸ªå¤§å°çæ¶æ¯åå徿´å 夿ã
大忶æ¯ç¸å ³é®é¢ç®åï¼å¯¹äºå¤§äº 64 KiB çæ¶æ¯ï¼å¦æè¦æ¯æè·¨æµè§å¨äº¤æ¢æ°æ®ï¼å为 16 KiBï¼ï¼å®é
ä¸ä¸å¤ªå®ç¨ä½¿ç¨ RTCDataChannel
ãé®é¢åºå¨ SCTPââç¨äºå¨ RTCDataChannel
ä¸åéåæ¥æ¶æ°æ®çåè®®ââæåæ¯è®¾è®¡ç¨ä½ä¿¡ä»¤åè®®çã人们é¢è®¡æ¶æ¯ä¼ç¸å¯¹è¾å°ã对äºå¤§äºç½ç»å± MTU çæ¶æ¯çæ¯æå 乿¯ä½ä¸ºä¸ç§äºåè¡¥å
æ·»å çï¼ä»¥é²ä¿¡ä»¤æ¶æ¯éè¦å¤§äº MTUãæ¤ç¹æ§è¦æ±æ¶æ¯çæ¯ä¸ªç段å
·æè¿ç»çåºåå·ï¼å æ¤å®ä»¬å¿
é¡»ä¸ä¸ªæ¥ä¸ä¸ªå°ä¼ è¾ï¼èä¸è½å¨å®ä»¬ä¹é´äº¤éå
¶ä»æ°æ®ã
è¿æç»æä¸ºä¸ä¸ªé®é¢ãéçæ¶é´çæ¨ç§»ï¼åç§åºç¨ç¨åºï¼å æ¬å®ç° WebRTC çåºç¨ç¨åºï¼å¼å§ä½¿ç¨ SCTP ä¼ è¾è¶æ¥è¶å¤§çæ¶æ¯ãæç»äººä»¬æè¯å°ï¼å½æ¶æ¯åå¾å¤ªå¤§æ¶ï¼ä¼ è¾å¤§æ¶æ¯å¯è½ä¼é»å¡è¯¥æ°æ®ééä¸çææå ¶ä»æ°æ®ä¼ è¾ââå æ¬å ³é®çä¿¡ä»¤æ¶æ¯ã
彿µè§å¨æ£ç¡®æ¯ææ¯æè¾å¤§æ¶æ¯çå½åæ åââè¡¨ç¤ºæ¶æ¯æ¯åºè¯¥è¢«è§ä¸ºå个ææè´è½½ä¸çæåä¸ä¸ªçç»æè®°å½ï¼EORï¼æ å¿æ¶ï¼è¿å°æä¸ºä¸ä¸ªé®é¢ãè¿å¨ Firefox 57 ä¸å·²å®ç°ï¼ä½å°æªå¨ Chrome ä¸å®ç°ï¼åè§ Chromium Bug 7774ï¼ãæäº EOR æ¯æï¼RTCDataChannel
çææè½½è·å¯ä»¥æ´å¤§ï¼å®æ¹ä¸é为 256 KiBï¼ä½ Firefox çå®ç°å°å®ä»¬éå¶å¨äºé«è¾¾ 1 GiB çæäººå¤§å°ï¼ãå³ä½¿å¨ 256 KiB 大å°ï¼è¿å·²ç»è¶³å¤å¤§å°å¯è½å¯¼è´å¤çç´§æ¥æµéæ¶åºç°ææ¾çå»¶è¿ãå¦ææ¶æ¯å徿´å¤§ï¼å»¶è¿å¯è½ä¼åå¾é¾ä»¥å¿åï¼é¤éä½ å¯¹ä½ çæä½æ¡ä»¶é常确å®ã
为äºè§£å³è¿ä¸ªé®é¢ï¼è®¾è®¡äºä¸ç§æ°çæµè°åº¦å¨ï¼é常称为âSCTP ndata è§èâï¼ï¼ä½¿å¾å¯ä»¥å¨ä¸åæµä¸äº¤éåéçæ¶æ¯ï¼å æ¬ç¨äºå®ç° WebRTC æ°æ®ééçæµãè¿ä¸ªææ¡ç®åä»å¤äº IETF èæ¡å½¢å¼ï¼ä½ä¸æ¦å®æ½ï¼å®å°ä½¿å¾åéå 乿²¡æå¤§å°éå¶çæ¶æ¯æä¸ºå¯è½ï¼å 为 SCTP å±å°èªå¨äº¤éåºå±çåæ¶æ¯ï¼ä»¥ç¡®ä¿æ¯ä¸ªééçæ°æ®é½ææºä¼ä¼ éã
Firefox 对 ndata çæ¯ææ£å¨å®ç°ä¸ï¼æ¥ç Firefox bug 1381145 以è·è¸ªå®ä½æ¶å¯ä»¥ç¨äºæ®éç¨éãChrome å¢éå¨ Chrome Bug 5696 ä¸è·è¸ªä»ä»¬å¯¹ ndata æ¯æçå®ç°ã
夿³¨ï¼ è¿ä¸é¨åç许å¤ä¿¡æ¯é¨ååºäº Lennart Grahl æ°åçå客æç§ WebRTC æ°æ®ééæ¶æ¯å¤§å°éå¶ãä»å¨é£é详ç»ä»ç»äºä¸äºå 容ï¼ä½éçæµè§å¨çæ´æ°ï¼é¨åå 容å¯è½å·²ç»è¿æ¶ãæ¤å¤ï¼éçæ¶é´çæ¨ç§»ï¼è¿ç§æ åµå°å徿´å ææ¾ï¼ç¹å«æ¯ä¸æ¦ EOR å ndata æ¯æå®å ¨éæå°ä¸»æµæµè§å¨ä¸ã
å®å ¨ææä½¿ç¨ WebRTC ä¼ è¾çæ°æ®é½æ¯å å¯çãå¨ RTCDataChannel
çæ
åµä¸ï¼æä½¿ç¨çå 坿¹æ³æ¯æ°æ®æ¥ä¼ è¾å±å®å
¨ï¼DTLSï¼ï¼å®åºäºä¼ è¾å±å®å
¨ï¼TLSï¼ãç±äº TLS ç¨äºä¿æ¤æ¯ä¸ª HTTPS è¿æ¥ï¼å æ¤ä½ 卿°æ®ééä¸åéç任使°æ®é½ä¸ç¨æ·æµè§å¨åéææ¥æ¶çå
¶ä»æ°æ®ä¸æ ·å®å
¨ã
æ´æ ¹æ¬å°æ¯ï¼ç±äº WebRTC æ¯ä¸¤ä¸ªç¨æ·ä»£çä¹é´çç¹å¯¹ç¹è¿æ¥ï¼å æ¤æ°æ®ä»æªç»è¿ Web æåºç¨æå¡å¨ãè¿åå°äºæ°æ®è¢«æ¦æªçæºä¼ã
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4