Peerjs: DataChannel์ด ์˜ˆ๊ธฐ์น˜ ์•Š๊ฒŒ ์ด์œ  ์—†์ด ๋‹ซํž™๋‹ˆ๋‹ค.

์— ๋งŒ๋“  2015๋…„ 04์›” 01์ผ  ยท  5์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: peers/peerjs

PeerJS๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŒŒ์ผ์„ ์ „์†กํ•˜๋Š” ๋ฐ ๋ช‡ ๊ฐ€์ง€ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค... ์ „์†ก์ด ์ž˜ ์ง„ํ–‰๋˜๊ณ  PeerJS๊ฐ€ DataChannel์„ ๋‹ซ๊ณ  ๋ฌด์—‡์ด ์ž˜๋ชป๋˜์—ˆ๋Š”์ง€์— ๋Œ€ํ•œ ๋กœ๊ทธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. PeerJS์— ๋Œ€ํ•œ ๋””๋ฒ„๊น…์„ ์ผœ๊ณ  ๋””๋ฒ„๊น… ๋กœ๊ทธ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋„๋ก PeerServer๋ฅผ ๋กœ์ปฌ๋กœ ์‹คํ–‰ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

Chrome ์ฝ˜์†”์˜ PeerJS ๋กœ๊ทธ:

screen shot 2015-03-31 at 8 35 25 pm

... ์ „์†ก์ด ์ž˜ ์ง„ํ–‰๋˜๊ณ  "DataChannel closed for: abc123_f9pes" ์ค„์ด ๊ธฐ๋ก๋˜๊ณ  ์—ฐ๊ฒฐ์ด ๋Š์–ด์ง€๋ฉฐ ์ „์†ก์ด ๋Š์–ด์ง‘๋‹ˆ๋‹ค.

PeerServer๋Š” ํ„ฐ๋ฏธ๋„์— ๋กœ๊ทธ์ธํ•ฉ๋‹ˆ๋‹ค.

screen shot 2015-03-31 at 8 35 45 pm

... ์ „์†ก์ด ์ž˜ ์ง„ํ–‰๋˜๊ณ  ์žˆ๋Š” ๋‹ค์Œ 2๊ฐœ์˜ "์†Œ์ผ“ ๋‹ซํž˜" ํ–‰์ด ๊ธฐ๋ก๋˜๊ณ  ์ „์†ก์ด ์ข…๋ฃŒ๋ฉ๋‹ˆ๋‹ค.

์ฒซ ๋ฒˆ์งธ ์งˆ๋ฌธ์€ "๋‹ค์Œ์— ๋Œ€ํ•œ ์ถ”๊ฐ€๋œ ICE ํ›„๋ณด" ๋ฐ "๋‹ค์Œ์— ๋Œ€ํ•œ ์ˆ˜์‹ ๋œ ICE ํ›„๋ณด" ํ–‰์ด PeerJS์— ์˜ํ•ด ์—ฌ๋Ÿฌ ๋ฒˆ ๊ธฐ๋ก๋˜๊ณ  "CANDIDATE from" ํ–‰์ด PeerServer์— ์˜ํ•ด ๊ธฐ๋ก๋˜๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

๋‚ด ๋˜ ๋‹ค๋ฅธ ์งˆ๋ฌธ์€ ์—ฐ๊ฒฐ์ด ๋Š์–ด์ง€๋Š” ์ด์œ ์ž…๋‹ˆ๋‹ค. ์†Œ์ผ“์ด ๋‹ซํ˜€ ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค... ๋ฌด์—‡์ด ์ž˜๋ชป๋  ์ˆ˜ ์žˆ๋Š”์ง€์— ๋Œ€ํ•œ ์•„์ด๋””์–ด๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

๋‚ด ํ™˜๊ฒฝ์— ๋Œ€ํ•œ ๊ฐœ์š”๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • PeerJS v0.3.13
  • ํ”ผ์–ด์„œ๋ฒ„ v0.2.8
  • ํฌ๋กฌ v41
  • ๋งฅ OS X v10.10.2

ps ์ด ๋ฌธ์ œ๋Š” ํด๋ผ์šฐ๋“œ ํ˜ธ์ŠคํŒ… PeerServer์— ๋Œ€ํ•ด ์‹คํ–‰ํ•˜๋Š” ๊ฒฝ์šฐ์—๋„ ์ง€์†๋ฉ๋‹ˆ๋‹ค.

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

@UnsungHero97

๋งŽ์€ ๋ฉ”์‹œ์ง€๋ฅผ ํ•จ๊ป˜ ๋ณด๋‚ด๋ฉด ํ•œ ๋ฒˆ์— ๋ณด๋‚ผ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ž…๋ ฅ ๋ฒ„ํผ์— ๋„ฃ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ฒ„ํผ๋Š” ๋ฌดํ•œ์ • ์ปค์งˆ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฏธ๋ฆฌ ๊ฒฐ์ •๋œ ์ œํ•œ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ œํ•œ์„ ์ดˆ๊ณผํ•˜๋ฉด Chrome >= 37์—์„œ ๋ฐ์ดํ„ฐ ์ฑ„๋„์ด ๋‹ซํžˆ๊ณ  ๋ชจ๋“  ๋ฉ”์‹œ์ง€๊ฐ€ ์‚ญ์ œ๋˜๊ณ  ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ Chrome <= 36์—์„œ๋Š” ์˜ˆ์™ธ๋งŒ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด๊ฒƒ์€ Chrome 37์—์„œ ์ˆ˜ํ–‰๋œ API ์ค‘๋‹จ ๋ณ€๊ฒฝ์ž…๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž๋Š” ์ด์ „ ๋ธŒ๋ผ์šฐ์ €๋ฅผ ๋‹ค๋ฃจ๋Š” ๊ฒฝ์šฐ ์ด ๋ณ€๊ฒฝ์— ์ฃผ์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ž‘์€ ์ˆ˜์ •: ํ–ฅํ›„ ์ฐธ์กฐ๋ฅผ ์œ„ํ•ด 16MB๊ฐ€ ์•„๋‹ˆ๋ผ 16KB์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ฐ™์€ ๋ฌธ์ œ์— ์ง๋ฉดํ–ˆ๋‹ค. Firefox ์ œํ•œ์€ ๋Œ€๋žต 16kiB(https://developer.mozilla.org/en-US/docs/Web/API/WebRTC_API/Using_data_channels#Understanding_message_size_limits)์ž…๋‹ˆ๋‹ค.

๋ชจ๋“  5 ๋Œ“๊ธ€

ํŒŒ์ผ์„ ๋„ˆ๋ฌด ๋นจ๋ฆฌ ์ฝ๊ณ  ์žˆ์—ˆ๊ณ  WebRTC ๋ฐ์ดํ„ฐ ์ฑ„๋„ ๋ฒ„ํผ๊ฐ€ ๊ฐ€๋“ ์ฐผ์Šต๋‹ˆ๋‹ค. ์ด ๋ฒ„ํผ๋Š” 16MB๋กœ ์ œํ•œ๋ฉ๋‹ˆ๋‹ค.

http://viblast.com/blog/2015/2/25/webrtc-bufferedamount/

๋งŽ์€ ๋ฉ”์‹œ์ง€๋ฅผ ํ•จ๊ป˜ ๋ณด๋‚ด๋ฉด ํ•œ ๋ฒˆ์— ๋ณด๋‚ผ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ž…๋ ฅ ๋ฒ„ํผ์— ๋„ฃ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ฒ„ํผ๋Š” ๋ฌดํ•œ์ • ์ปค์งˆ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฏธ๋ฆฌ ๊ฒฐ์ •๋œ ์ œํ•œ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ œํ•œ์„ ์ดˆ๊ณผํ•˜๋ฉด Chrome >= 37์—์„œ ๋ฐ์ดํ„ฐ ์ฑ„๋„์ด ๋‹ซํžˆ๊ณ  ๋ชจ๋“  ๋ฉ”์‹œ์ง€๊ฐ€ ์‚ญ์ œ๋˜๊ณ  ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ Chrome <= 36์—์„œ๋Š” ์˜ˆ์™ธ๋งŒ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด๊ฒƒ์€ Chrome 37์—์„œ ์ˆ˜ํ–‰๋œ API ์ค‘๋‹จ ๋ณ€๊ฒฝ์ž…๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž๋Š” ์ด์ „ ๋ธŒ๋ผ์šฐ์ €๋ฅผ ๋‹ค๋ฃจ๋Š” ๊ฒฝ์šฐ ์ด ๋ณ€๊ฒฝ์— ์ฃผ์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋ง™์†Œ์‚ฌ ... ๋‚˜๋Š” peerJS์—์„œ๋„ ๋˜‘๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ๊ณ  ์–ด๋–ค ๋Œ€๋‹ต๋„ ์ฐพ์„ ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค (๋‚˜๋Š” ์ผ์ข…์˜ ๋ฒ„ํผ์™€ ๊ด€๋ จ๋œ ๊ฒƒ์ด๋ผ๊ณ  ๊ฐ€์ •ํ–ˆ์Šต๋‹ˆ๋‹ค). ๋งˆ์นจ๋‚ด ์•„์ด๋””์–ด๋ฅผ ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด๋˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค ๋‚ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜์‹ญ์‹œ์˜ค. peerJS์—๋Š” ๋ฒ„ํผ๋ง์˜ ๋‚ด๋ถ€ ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด ์žˆ๋‹ค๋Š” ๊ฒƒ์ด ํฅ๋ฏธ๋กญ์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ์ด ๋ฌธ์ œ์— ๋Œ€ํ•ด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋งŒ๋“ค์–ด์กŒ์ง€๋งŒ ์ด๊ฒƒ์ด ๊ตฌํ˜„ ๋œ ๊ฒƒ์€ ๋ณด๋‚ผ ์ˆ˜ ์—†๋‹ค๋Š” ์˜ˆ์™ธ๋ฅผ ์žก๋Š” ๋ฐ ์˜์กดํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ด๋ฉฐ ์ƒˆ๋กœ์šด ํฌ๋กฌ ์ฑ„๋„์—์„œ ๋ฐฉ๊ธˆ ์ข…๋ฃŒ ๋œ ๊ฒฝ์šฐ ์ด์ œ ์‹œ์Šคํ…œ์ด ์ค‘๋ณต๋ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” (๋งŒ์•ฝ) ์ด๊ฒƒ์ด ์ด์œ ๋ผ๊ณ  ํ™•์‹ ํ•˜๊ฒŒ ๋˜๋Š” ์ฆ‰์‹œ ๊ทธ๊ฒƒ์— ๋Œ€ํ•ด ๋ฌธ์ œ๋ฅผ ์ œ๊ธฐํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํŽธ์ง‘: ์˜ˆ, ํ•ฉ๋ฒ•์ ์œผ๋กœ ๋ณด์ด๊ณ  bufferedAmount๋Š” ์•ฝ 16mb๋กœ ์ด๋™ํ•˜๊ณ  ๋ชจ๋“  ๊ฒƒ์ด ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ, ์ด๊ฒƒ์€ ๋ฐœ๊ฒฌํ•˜๊ธฐ ํž˜๋“  ๋ฒ„๊ทธ์˜€์Šต๋‹ˆ๋‹ค. ๋ฌด์Šจ ์ผ์ด ์ผ์–ด๋‚˜๊ณ  ์žˆ๋Š”์ง€ ๋งˆ์นจ๋‚ด ์ดํ•ดํ•˜๋Š” ๋ฐ ๋ฉฐ์น ์ด ๊ฑธ๋ ธ์Šต๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ ์ฑ„๋„ ๋ฒ„ํผ๊ฐ€ ์˜ค๋ฒ„ํ”Œ๋กœ๋˜๊ณ  Chrome์ด ์—ฐ๊ฒฐ์„ ์ข…๋ฃŒํ•  ๋•Œ ์ ์ ˆํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•˜๋ ค๋ฉด PeerJS๋ฅผ ์—…๋ฐ์ดํŠธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๊ฑด ๊ทธ๋ ‡๊ณ , ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์ด๊ฒƒ์„ ์šฐ์—ฐํžˆ ๋ฐœ๊ฒฌํ•˜๋ฉด ๋ฌธ์ œ๋ฅผ ์—ด๊ณ  ํ•ด๋‹น https://github.com/peers/peerjs/issues/291 ์„ ์ˆ˜์ •ํ•˜๊ธฐ ์œ„ํ•ด peer.js ์†Œ์Šค์— ์•ฝ๊ฐ„์˜ ํŽธ์ง‘์„ ๊ฒŒ์‹œํ–ˆ์Šต๋‹ˆ๋‹ค.

@UnsungHero97

๋งŽ์€ ๋ฉ”์‹œ์ง€๋ฅผ ํ•จ๊ป˜ ๋ณด๋‚ด๋ฉด ํ•œ ๋ฒˆ์— ๋ณด๋‚ผ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ž…๋ ฅ ๋ฒ„ํผ์— ๋„ฃ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ฒ„ํผ๋Š” ๋ฌดํ•œ์ • ์ปค์งˆ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฏธ๋ฆฌ ๊ฒฐ์ •๋œ ์ œํ•œ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ œํ•œ์„ ์ดˆ๊ณผํ•˜๋ฉด Chrome >= 37์—์„œ ๋ฐ์ดํ„ฐ ์ฑ„๋„์ด ๋‹ซํžˆ๊ณ  ๋ชจ๋“  ๋ฉ”์‹œ์ง€๊ฐ€ ์‚ญ์ œ๋˜๊ณ  ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ Chrome <= 36์—์„œ๋Š” ์˜ˆ์™ธ๋งŒ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด๊ฒƒ์€ Chrome 37์—์„œ ์ˆ˜ํ–‰๋œ API ์ค‘๋‹จ ๋ณ€๊ฒฝ์ž…๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž๋Š” ์ด์ „ ๋ธŒ๋ผ์šฐ์ €๋ฅผ ๋‹ค๋ฃจ๋Š” ๊ฒฝ์šฐ ์ด ๋ณ€๊ฒฝ์— ์ฃผ์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ž‘์€ ์ˆ˜์ •: ํ–ฅํ›„ ์ฐธ์กฐ๋ฅผ ์œ„ํ•ด 16MB๊ฐ€ ์•„๋‹ˆ๋ผ 16KB์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ฐ™์€ ๋ฌธ์ œ์— ์ง๋ฉดํ–ˆ๋‹ค. Firefox ์ œํ•œ์€ ๋Œ€๋žต 16kiB(https://developer.mozilla.org/en-US/docs/Web/API/WebRTC_API/Using_data_channels#Understanding_message_size_limits)์ž…๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰