RTCPeerConnection
ì¸í°íì´ì¤ë¥¼ ì¬ì©íì¬ WebRTC Peerconnctionì ì°ê²°íë©´ ì´ì ë Peerê°ì 커ë¥ì
ì íµíì¬ ë¯¸ëì´ ë°ì´í°ë¥¼ ì£¼ê³ ë°ìì ìê²ë©ëë¤. ê·¸ë¿ìëë¼ WebRTCë¡ í ì ìë ì¼ì ë ììµëë¤. ì´ ê°ì´ëìì ì°ë¦¬ë peer connectionì ë°ì´í° ì±ëì ì¶ê°íë ë°©ë²ê³¼ ììì ë°ì´í°, ì¦ ì°ë¦¬ê° ìíë ì´ë í í¬ë©§ì ë°ì´í°ë¤ì ìì íê² ì£¼ê³ ë°ë ë°©ë²ì ë°°ì°ê² ë ê² ì
ëë¤.
ì°¸ê³ : 모ë WebRTC ì»´í¬ëí¸ë¤ì ìí¸í를 ì¬ì©íê² ëì´ ì기 ë문ì RTCDataChannel
ì ì´ì©íë ì´ë¤ ë°ì´í° ì ì¡ë ìëì ì¼ë¡ Datagram Transport Layer Security (DTLS)ì ì¬ì©íì¬ ìí¸í ë©ëë¤. ìì¸í ë´ì©ì Security 를 ì°¸ê³ íììì¤.
RTCDataChannel
를 ì´ì©í 기ì´ì ì¸ ë°ì´í° ì ì¡ì ìëì ë ë°©ë²ì¤ íë를 ì´ì©íì¬ ë§ë¤ì ììµëë¤.
datachannel
ì´ë²¤í¸ë¥¼ ìì ë°ê² íì¬ remote peerì ì립ëë¤. ì°¸ ì½ì£ ? ì´ ë¨ìí ë¡ì§ì ë°íì¼ë¡ ìë§ì íì©ë²ì ë§ë¤ì´ ë¼ ì ììµëë¤. íì§ë§ ë¨ìí기 ë문ì 구ííê³ ìíë 모ë ì구를 ë§ì¡±í´ì£¼ì§ë 못í©ëë¤.ììì ì¸ê¸í ëê°ì§ ë°©ë²ì ê°ê° ì´í´ë³´ê² ìµëë¤. ì°ì ì ê°ì¥ ì¼ë°ì ì¼ë¡ ì¬ì©ëë 첫ë²ì§¸ ë°©ë²ë¶í° ì´í´ë³´ê² ìµëë¤.
ìë íì(Automatic negotiation)RTCDataChannel
ì°ê²°ì íìì í¸ë¤ë§í기 ìí´ ëë¶ë¶ Peer ì°ê²°ì ì¬ì©íê² ë©ëë¤. ì´ë¥¼ ìí´ ê°ë¨í negotiated
íë¡í¼í°ì ê°ì ì§ì íì§ ìê³ createDataChannel()
를 í¸ì¶íê±°ë ê·¸ì falseë¡ ì¤ì í©ëë¤. ì´ íìë íìì í¸ë¤ë§í기 ìí´ ìëì ì¼ë¡ RTCPeerConnection를 ë°ëìí¤ê³ ì격 í¼ì´(remote peer)ê° ë°ì´í° ì±ëì ë§ë¤ê³ ë¤í¸ìí¬ë¥¼ íµíì¬ ìë¡ë¥¼ ì°ê²°ëê² ë§ëëë¤.
createDataChannel()를 íµí´ RTCDataChannel ê°ì²´ê° ì¦ì ë°íë©ëë¤. ê·¸í open
ì ì´ë²¤í¸ê° RTCDataChannelë¡ ì¡ì ëë ê²ì íì¸íë¤ë©´ ì±ê³µì ì¼ë¡ ì°ê²°ëìë¤ê³ ë§í ì ììµëë¤.
let dataChannel = pc.createDataChannel("MyApp Channel");
dataChannel.addEventListener("open", (event) => {
beginTransmission(dataChannel);
});
ìë íì(Manual negotiation)
Data channelì ìëíìì ìí´ì ì°ì RTCPeerConnection
ì ìë createDataChannel()
매ìë를 ì¬ì©íì¬ RTCDataChannel
ê°ì²´ë¥¼ ìì±í´ì¼ í©ëë¤. ì´ë negotiated
íë¡í¼í°ì ê°ì trueë¡ ì¤ì í´ì¼ í©ëë¤. ì´ í¼ì´ ì°ê²°ì ìí ì í¸ë¤ì ì¤ì íë 측ì í¼ì´ ì°ê²° íìì ìëíì§ ìëë¡ í©ëë¤.
ëìì¸ì ì°ê²° íìì ì¹ìë²ë ë¤ë¥¸ ë°©ë²ì ì´ì©í´ì¼ í©ëë¤. ì´ ì ì°¨ë¤ì ìëì¼ë¡ RTCDataChannelì ì격 í¼ì´ìê² ì í¸ë¥¼ ë³´ë´ì¼ íë©° ëì¼í id
를 ì¬ì©í´ì¼ íê³ negotiated íë¡í¼í°ë trueë¡ ì¤ì í´ì¼í©ëë¤. ì´ ì¤ì ë¤ì RTCPeerConnection를 ì´ì©í´ ë ì¤ë¸ì í¸ê° ì°ê²°ëê² í©ëë¤.
let dataChannel = pc.createDataChannel("MyApp Channel", {
negotiated: true,
});
dataChannel.addEventListener("open", (event) => {
beginTransmission(dataChannel);
});
requestRemoteChannel(dataChannel.id);
ìì ì½ëììë ì±ë ìì±ì negotiated íë¡í¼í°ë¥¼ trueë¡ ì¤ì í´ì£¼ìê³ requestRemoteChannel()ì í¸ì¶í¨ì¼ë¡ ì격 ì±ëê³¼ ëì¼í ë¡ì»¬ ì±ë ID를 ë§ë¤ê¸° ìí íì(negotiation)ì ë°ëìì¼°ìµëë¤.
ì´ ì 차를 ë°ì¼ë¯ë¡ì ë¤ë¥¸ íë¡í¼í°ë¥¼ ê°ë ê°ê°ì í¼ì´ë¤ì´ ë°ì´í° ì±ëì ìì±íê³ ê°ì id ê°ì ì¬ì©íë ì±ëì ëª ííê³ ì½ê² ìì±í ì ììµëë¤.
ë²í¼ë§(Buffering)WebRTC ë°ì´í°ì±ëì ììë°ì´ë ë°ì´í°ì ëí´ ë²í¼ë§ì ì ê³µí©ëë¤. ì´ê²ì ìëì ì¼ë¡ ì²ë¦¬ê°ë©ëë¤. bufferì ì¬ì´ì¦ë¥¼ 컨í¸ë¡¤ í ì ìë ëì ë¹ì ì ì¼ë§ë ë§ì ë°ì´í°ê° íì¬ ë²í¼ ëì´ ìëì§ ë°°ì¸ ì ìê³ í ë°ì´í°ì ë²í¼ê° ê³ ê°ë기 ììí ë ì림ì ë°ëë¡ ì íí ì ë ììµëë¤. ì´ê²ì ë©ëª¨ë¦¬ ê³¼ë¤ì¬ì©ì´ë ì±ëì ìì í ë°ì´ë´ë²ë¦¬ë ê²ì ìì ê³ ì¸ì ë ë°ì´í°ë¥¼ ë³´ë¼ì ìëë¡ í¨ê³¼ì ì¸ ë£¨í´ì ë§ë¤ê¸° ì½ê² í´ì¤ëë¤.
ë©ì¸ì§ í¬ê¸° ì íì ëí´ ì´í´í기ë¤í¸ìí¬ë¥¼ íµíì¬ ì ì¡ëë ë°ì´í°ë¼ë©´ ê·¸ ë°ì´í°ë ë°ëì ì¬ì´ì¦ê° ì íë©ëë¤. 기ì´ì ì¸ ë 벨ì ì´ì¼ê¸°ë¥¼ íìë©´, ê°ê°ì ë¤í¸ìí¬ í¨í·ì ì´ë í ê°ë³´ë¤ í´ ì ììµëë¤. (ì íí ì«ìë ë¤í¸ìí¬ì ì ì¡ ê³ì¸µì´ ì¬ì©íê³ ìë ê²ì ë°ë¼ ë¤ë¦ ëë¤.) ì´í리ì¼ì´ì ê³ì¸µììë â ì¦ ë¹ì ì ì½ëê° ëìê°ê³ ìë WebRTC user agent's â WebRTCê° ë¤í¸ìí¬ì ì ì¡ê³ì¸µìì ìµë í¨í·ì¬ì´ì¦ë³´ë¤ ë©ìì§ê° ë í°ì§ íì¸íë ê²ì 구íí ì ììµëë¤.
ë§ì½ ë¹ì ì´ ì¬ì´ì¦ ì í í¬ê¸°ê° ê¶ê¸íì§ ìë¤ê±°ë ëì©ë ë©ì¸ì§ë¥¼ ë³´ë´ê±°ë ë°ë ê²ì´ íìíì§ ìë¤ë©´ ì´ ì´ì¼ê¸°ë ë³µì¡í ì´ì¼ê¸°ê° ë ì ììµëë¤. Even when user agents share the same underlying library for handling Stream Control Transmission Protocol (SCTP) data, there can still be variations due to how the library is used. ì를ë¤ì´ Firefoxì êµ¬ê¸ í¬ë¡¬ì SCTP를 구íí기 ìí´ usrsctp
ë¼ì´ë¸ë¬ë¦¬ë¥¼ ì¬ì©í©ëë¤. ì´ë ê·¸ ë ë¸ë¼ì°ì ê° ì´ë»ê² ë¼ì´ë¸ë¬ë¦¬ì ìì²íê³ ì´ë²¤í¸ì ë°ìíëì§ì ë°ë¼ RTCDataChannel
ì ì´ì©í ë°ì´í° ì ì¡ì´ ì¤í¨íë ê²½ì°ê° ììµëë¤.
ë ì ì ê° Firefoxì ìë ë°ì´í°ì±ëì ì¬ì©íì¬ íµì¤í ë ë©ì¸ì§ ì¬ì´ì¦ì ì íì Firefoxì í¬ë¡¬ì ê°ê° ì¬ì©í ëë³´ë¤ í½ëë¤. ìëíë©´ Firefoxì 구í ë°©ë²ì íì¬ ë¤ì¤ SCTPë©ì¸ì§ë¥¼ ì ì¡íë 기ì ì deprecatedíì¬ ëììµëë¤. íì§ë§ í¬ë¡¬ì ì¬ì í ê°ë¥í©ëë¤. í¬ë¡¬ì ìì± ë ê²ì´ë¼ íì íë ë©ìì§ ì리ì¦ë¥¼ ë³´ë ëì RTCDataChannelì ë¤ì¤ ë©ìì§ë¡ì ìì íë ê²ì¼ë¡ ëì±í ê²ì ëë¤.
ë©ì¸ì§ê° 16kiB ìë¤ë©´ ë³ë¤ë¥¸ 무리 ìì´ ë³´ë¼ ì ìì ê² ì ëë¤. ëë¶ë¶ì ë©ì´ì user agentsë ëì¼íê² ë¤ë£¹ëë¤.
ëì©ë ë©ì¸ì§ì ëí´ ê³ ë ¤í´ë³´ê¸°~~íì¬ ë©ì¸ì§ ì¬ì´ì¦ê° 64kiB (16kiB if you want to support cross-browser exchange of data)를 ëë RTCDataChannel
ë 구íëì§ ìììµëë¤. 문ì ë RTCDataChannel
ìì ì¡ìì íë¡í ì½ë¡ ì¬ì©ëë SCTPê° ìë ìê·¸ëë§ íë¡í ì½ë¡ ëìì¸ ëìë¤ë ê² ì
ëë¤. ê·¸ëì ë©ì¸ì§ê° ìëì ì¼ë¡ ìì ì¬ì´ì¦ë¼ê³ ê°ì íê³ ë§ë¤ì´ì§ íë¡í ì½ì
ëë¤. Support for messages larger than the network layer's Maximum transmission unit was added almost as an afterthought, in case signaling messages needed to be larger than the MTU. ì´ ê¸°ë¥ì ê°ê°ì ì¡°ê°ì ì°ìì ì¸ ìíì¤ ë²í¸ë¥¼ íìë¡ í©ëë¤. ì¦ ìí¸ë°°ì¹ë¥¼ íµí´ ëìì ì¬ë¬ ë°ì´í°ë¥¼ ë³´ë¼ ì ìê³ íë를 ë³´ë¸ ì´í ë¤ì íë를 ë³´ë´ì¼ í©ëë¤.~~
~~ì´ë¬í ì ì 문ì ê° ë©ëë¤.~~ ì§ê¸ ê·¸ë¦¬ê³ ì´íìë WebRTC를 구ííê³ ìë ê²ë¤ì í¬í¨í ë¤ìí ì´í리ì¼ì´ì ë¤ì´ ëì±ë í° ë©ìì§ë¥¼ ì ì¡í기 ìí´ SCTP를 ì¬ì©í©ëë¤. ê²°êµì ë©ìì§ê° ê°ë¹í ì ìì ë§í¼ 커ì§ê² ëë¤ë©´ ì ë§ ì¤ìí ìê·¸ëë§ ë©ìì§ë¥¼ í¬í¨í ë°ì´í° ì±ëìì ì ì¡ëë 모ë ë¤ë¥¸ ë°ì´í°ë¤ì´ ë¸ë½ë¹í ì ìë¤ë ê²ì ìê²ëììµëë¤.
ì´ê²ì ë¸ë¼ì°ì ê° íì¬ì ëì©ë ë©ìì§ë¥¼ ì²ë¦¬íë íì¤ì¸ end-of-record(EOR) íë ê·¸ (ë©ìì§ê° ì¬ë¬ ì리ì¦ìì ë§ì§ë§ì¼ë íëì íì´ë¡ëë¡ì ì·¨ê¸íê²íë íë ê·¸)를 ì ê³µí ë 문ì ê° ë©ëë¤. ì´ íë ê·¸ë Firefox 57ììë 구íì´ ëì´ììµëë¤. ê·¸ë¬ë Chrome ììë ìì§ êµ¬íì´ ëì´ìì§ ììµëë¤.(Chromium Bug 7774 참조). EOR를 ì ê³µíë RTCDataChannel íì´ë¡ëë ëì± ì»¤ì§ ì ììµëë¤. (ê³µìì ì¼ë¡ 256kiBê¹ì§ì´ë©° Firfoxì 구íì¼ë¡ë 1GiBê¹ì§ê°ë¥). 256kiBìì ì¡°ì°¨ 긴ê¸í í¸ëí½ì ì²ë¦¬í기ìë ì ì미í ì§ì°ì ì¼ê¸°ìí¤ì ì¶©ë¶í í° ì©ëì ëë¤. ë§ì½ ì¬ê¸°ì ë 커ì§ë¤ë©´ ì§ì°ì ë¹ì ì´ í¹ì í ì¡°ìì íëë¼ë ì¤ì¼ì ìì ê²ì ëë¤.
ì´ë¬í 문ì ì ì í´ê²°í기 ìí´ ì¤í¸ë¦¼ ì¤ì¼ì¥´ë¬(stream schedulers)ë¼ê³ íë ì´ë¦ì§ì´ì ¸ ìì¼ë©° SCTP ndata specificationì´ë¼ê³ ë ë¶ë¦¬ì°ë ìë¡ì´ ìì¤í ì ëìì¸íììµëë¤. ì´ ì¤ì¼ì¥´ë¬ë WebRTC ë°ì´í° ì±ëì 구íëì´ ìë ì¤í¸ë¦¼ì í¬í¨í ê°ê¸° ë¤ë¥¸ ì¤í¸ë¦¼ì ë©ìì§ë¥¼ ìí¸ë°°ì¹íì¬ ì ì¡ê°ë¥í©ëë¤. ì´ ì ìì IETF ì ì(draft form) ìíì ìì§ë§ íë² êµ¬íëë¤ë©´ SCTP ê³ì¸µì ìëì ì¼ë¡ ìë¸ë©ìì§ë¤ìê² ëª¨ë ë°ì´í° ì±ëì íµê³¼í ì ìë 기í를 ë³´ì¥íë ìí¸ë°°ì¹ë¥¼ í기ë문ì 기본ì ì¼ë¡ ì¬ì´ì¦ì ì íì´ ìë ë©ìì§ë¥¼ ë³´ë¼ì ìê²ë ê²ì ëë¤.
Firefoxë ndata를 ì§ìí기 ìí´ íì¬ êµ¬íë¨ê³ì ììµëë¤. ì¼ë°ì ì¸ ì¬ì©ì´ ì¸ì 쯤 ê°ë¥í ì§ì ëí´ ê¶ê¸íìë¤ë©´ Firefox bug 1381145 ì ê´ì¬ìê² ë³´ê³ ê³ììì. Chrome íì Chrome Bug 5696 를 íµí´ ndata ì§ìì ìí 구íì í¸ëí¹íê³ ììµëë¤.
ì´ ì¹ì ì ìë ëë¶ë¶ì ì ë³´ë ë¤ì ë¸ë¡ê·¸ í¬ì¤í¸ë¥¼ 기ë°ì¼ë¡ ìì±ëììµëë¤. Demystifyijng WebRTC's Data Channel Message Size Limitations, written by Lennart Grahl. ì´ ë¸ë¡ê·¸ë¥¼ ë³´ìë©´ ëì± ìì¸í ë´ì©ì´ ëì ììµëë¤. ê·¸ë¬ë ë¸ë¼ì°ì ¸ë¤ì ë¹ìë³´ë¤ ì ë°ì´í¸ ëì기ë문ì ê·¸ ì ë³´ë¤ì íì¬ì ë§ì§ ìì ì ë ììµëë¤. ëí íì¬ë ìê°ì´ ë§ì´ íë¬ ëë¶ë¶ì ë©ì´ì ë¸ë¼ì°ì ììë EORì´ êµ¬íëì´ ììµëë¤.
ë³´ì(Security)WebRTCë¡ ì ì¡ëë 모ë ë°ì´í°ë ìí¸íë©ëë¤. RTCDataChannel
ì ìí¸íëTransport Layer Security (TLS)를 ë°íì¼ë¡ íë Datagram Transport Layer Security (DTLS)를 ì¬ì©í©ëë¤. TLSë 모ë ìí¸íë HTTPS íµì ì ì¬ì©ë기 ë문ì data channelì ì¬ì©ëë 모ë ë°ì´í°ë ì¬ì©ìì ë¸ë¼ì°ì ê° ë°ì´í°ë¥¼ ì£¼ê³ ë°ë ë§í¼ì ë³´ìì´ ë³´ì¥ë©ëë¤.
ì¡°ê¸ë 근본ì ì¼ë¡ WebRTCë ë ì¬ì©ìê°ì peer-to-peer ì°ê²°ì´ê¸°ë문ì ë°ì´í°ê° ì´ë í ë¤ë¥¸ ì¹ì´ë ì´í리ì¼ì´ì ìë²ë¥¼ ê²½ì íì§ ììµëë¤. ì´ë¬í íµì ë°©ìì¼ë¡ ì¸í´ ë°ì´í°ê° ì¤ê°ì ê°ë¡ì±ì´ì§ ê°ë¥ì±ì´ ì¤ì´ëëë¤.
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