์ฐ์ : ์๋ฐ์คํฌ๋ฆฝํธ์ ์ด๋ฒคํธ ํ์ด๋ฐ์ ๋ํ ์ ์ง์์ด ๋ถ์กฑํฉ๋๋ค. ๋ฐ๋ผ์ ์ ๊ฐ ์์ฒญํ ๋ด์ฉ์ด ๋ถ๋ช ํด ๋ณด์ธ๋ค๋ฉด ์ฌ๊ณผ๋ฅผ ๋ฐ์์ฃผ์ธ์.
ํผ์ด A๊ฐ DataConnection.on('connection', function() {...})
๋ฅผ ํตํด ๋ค๋ฅธ ํผ์ด B์ ์ฐ๊ฒฐ์ ์ฒ๋ฆฌํ ๋ ํด๋น ์ฐ๊ฒฐ์ ํธ๋ค๋ฌ ๋ด์์ ์ค๋น๋ ๊ฒ์
๋๊น, ์๋๋ฉด ์ด๋ฒคํธ ํธ๋ค๋ฌ๊ฐ ๋ฐํ๋ ํ ์์ ํ ์ฌ์ฉํ ์ ์์ต๋๊น? ๋ด ๋ง์: ์ด ์ฝ๋์์์ฒ๋ผ A๊ฐ B์๊ฒ ๋ฐ์ดํฐ ๋ฉ์์ง๋ฅผ ๋ณด๋ผ ์ ์์ต๋๊น?
peerA.on('connection', function(c) {
// do something
c.send("Welcome! (will this message ever got delivered?)");
// do something else
});
๋ง์ฝ ์ด๊ฒ์ด ๋ถ๊ฐ๋ฅํ๋ค๋ฉด ์ด๋ฌํ ๊ฒฝ์ฐ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํด 'afterconnection' ์ด๋ฒคํธ๋ฅผ ๊ฐ๋ ๊ฒ์ด ์ข์ง ์์๊น์? ์๋๋ฉด ๋ค์ ์ฝ๋๊ฐ ์๋ํ ๊ฒ์ผ๋ก ์์๋ฉ๋๊น?
peerA.on('connection', function(c) {
// do something
setTimeout(function() {
c.send("Welcome! (will this message ever got delivered?)");
}, 0);
});
๊ฐ์ฌํฉ๋๋ค.
ํธ๋ค๋ฌ์์ ์ฌ์ฉํ ์ค๋น๊ฐ ๋์์ต๋๋ค. "์ฐ๊ฒฐ ์์" ์ด๋ฒคํธ๋ ๊ทธ๋ค์ง ์ ์ฉํ์ง ์์ต๋๋ค. ์ด๋ค ๊ฒฝ์ฐ์ ์ ์ฉํ๋ค๊ณ ์๊ฐํ์ญ๋๊น?
๋ด๊ฐ ๊ฐ๋ฐ ์ค์ธ ํ๋ก์ ํธ์์ ํ ๊ฐ์ง ๋ฌธ์ ๋ ์์น ์๋ ์ฐ๊ฒฐ์ ํผํ๋ ๊ฒ์ ๋๋ค.
ํ์, ์ฐ์ฌ, ๊ต์ฌ์ ์ธ ๊ฐ์ง ์ญํ ์ด ์์ต๋๋ค(ํผ์ด๋ฅผ ๋ฑ๋กํ ๋ ์ต์
๋ฐฐ์ด์์ ์ญํ ์ ๋ํ๋ด๋ ๋ฉํ๋ฐ์ดํฐ ํ๋๊ทธ๋ฅผ ์ถ๊ฐํ์ต๋๋ค). ์ ์๋์ ์์ ์ด ์๊ณ ์๋ ์์ ์ ์์ด๋๋ก ์๋ฒ์ ์ ์ํ์ฌ ๋ฐํ์์ ํ์์ ๊ธฐ๋ค๋ฆฝ๋๋ค. ๋ชจ๋ ์ฐ๊ฒฐ๋๋ฉด ์ถ๊ฐ ์ฐ๊ฒฐ์ ํผํด์ผ ํฉ๋๋ค.
v2.0.0์์ ๊ตฌํํ ๊ฑฐ๋ถ๊ฐ ์ ๋๋ก ์๋ํด์ผ ํ์ง๋ง API์ ๋ณ๊ฒฝ ์ฌํญ์ด ์๋นํ ๊ณผ๊ฒฉํ ๊ฒ ๊ฐ์ต๋๋ค.
์, ์ ๋ฒ์ ์ ์์ฅ ๋ฒ์ ์ ๋๋ค(์ค๋จ, ์ด์ ๋ฒ์ ๊ณผ์ ํธํ์ฑ ์์). ์ด์ API๋ ์๋นํ ํผ๋์ค๋ฝ๊ณ ์ฝ๋์๋ 2013๋ ์ฒซ ๋ ๋ถํฐ ๋ง์ ๋ ๊ฑฐ์ ํธ๋ฆญ์ด ์์ด ์ ์ง ๊ด๋ฆฌํ๊ธฐ๊ฐ ๋งค์ฐ ์ด๋ ต์ต๋๋ค.
๊ทธ๋ฌ๋ ๋ธ๋ ์ดํน ์ฒด์ธ์ง์ด๋ฏ๋ก ์ด์ ๋ฒ์ ์ ๊ณ์ ์ง์ํ ๊ฒ์ด๋ฏ๋ก v1์์ ๊ฑฐ๋ถ์ ์ผ๋ถ ๋ฐฉ๋ฒ์ ๊ตฌํํ ๊ฒ์ ๋๋ค. ์ด์จ๋ ์์ฃผ ์ค๋๋ ๋ธ๋ผ์ฐ์ ๋ฅผ ์ง์ํ ํ์๊ฐ ์๋ค๋ฉด v2๋ก ์ด๋ํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ์์ ์ฑ์ด ํฅ์๋๊ณ PeerServer๋ฅผ ํธ์คํ ํ ํ์๊ฐ ์์ต๋๋ค.
v2์์๋ ์์ง ๊ฑฐ์ ์ด ์๋ฃ๋์ง ์์์ง๋ง v2 ๊ฐ๋ฐ์ ์ง์คํ๊ณ ์์ด ํด๋น ๊ธฐ๋ฅ์ด ๊ณง ์ค๋น๋ ์์ ์ ๋๋ค.
๋๋ ๋น์ ์ด v2์ ๋ํด ์ ๊ณตํ ์์ ๋ฅผ ๋ณด์๊ณ ์ ๋ง ์ธ์์ ์ ๋๋ค: ๋ช ์ค์ ์ฝ๋๋ก ๊ฐ๋จํ ์ผ๋์ผ ์ฑํ ! ๋ํ ํด๋น ์ฝ๋๋ฅผ ์ฝ๊ฐ ์์ ํ๋๋ฐ ๋๊ตฐ๊ฐ๊ฐ ๋ฐฉ์ ์ฐธ์ฌํ ๋๋ง๋ค ๊ฐ ํผ์ด์์ onRemoteStream์ด ์คํ๋์ด ๋์ญํญ์ด ์ง์ํ ์ ์๋ ๋ชจ๋ ๋ฏธ๋์ด ์ฐ๊ฒฐ์ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค. ์์ฐ!!!
๋ช ๊ฐ์ง ์ง๋ฌธ:
์ถ์ : ๋ฐฉ๋น ์ต๋ ํผ์ด ์๋ฅผ ์ถ๊ฐํ๊ธฐ ์ํด ๋ก๋๋งต ๊ณํ์ ์ ๋ฐ์ดํธํ ๊ฒ์ ๋ณด์๋๋ฐ, ์ด๊ฒ์ด ์ ๊ฐ ์ ๋ง ํ์๋ก ํ๋ ๊ฒ์ ๋๋ค!
๋ค! ๋ฐฉ๊ธ ๊ทธ ๊ธฐ๋ฅ์ ๊ณํ์ ์ถ๊ฐํ์ต๋๋ค. ๊ตฌํํ๊ธฐ๊ฐ ๋งค์ฐ ์ฌ์์ผ ํฉ๋๋ค.
์ด๋ฏธ ํธ๋ค๋ฌ์ ์คํธ๋ฆผ์ ์ก์ธ์คํ ์ ์์ต๋๋ค. ๊ทธ๊ฒ์ ์ ๋ฌธ์ํ๋์ด ์์ง ์์ง๋ง, ๋น์ ์ด ๋งํ๋ฏ์ด ํผ์ด ๋น ํ๋์ ์๊ฒฉ ์คํธ๋ฆผ์ ์์ ํ๊ณ ์์ ์ ์๊ฒฉ ์คํธ๋ฆผ์ ํ ๋ฒ ์์ ํฉ๋๋ค. ์ด๋ ํ์ฌ ๋ชจ๋ ์ฐ๊ฒฐ์ ์ฌ์ฌ์ฉ๋๋ฉฐ ํ์ํ ๊ฒฝ์ฐ ๋์ค์ ๋ณ๊ฒฝ๋ ์ ์์ต๋๋ค.
์คํธ๋ฆผ์ ๋ณด๋ด๊ธฐ ์ ์ ์ฒ๋ฆฌํ๋ค๋ ๋ป์ ๋๊น? ๊ทธ๋ ๋ค๋ฉด ๊ตฌํ๋ ๊ฐ๋ฅํฉ๋๋ค.
์, ์ฐ๊ฒฐ๋ ํผ์ด๋น ํ๋์ฉ ์์ dataChannels๋ฅผ ์์ ํฉ๋๋ค. ์์์ ์ธ๊ธํ ๋ฉํ๋ฐ์ดํฐ ๊ธฐ๋ฅ๊ณผ๋ ์ ์๋ํฉ๋๋ค.
PeerJS๋ ์ด๊ธฐ ์ ํธ๋ฅผ ์ํํ๊ธฐ ์ํ ์ฑ๋์ด ํ์ํฉ๋๋ค. ํ์ง๋ง ์ด์ PeerServer๋ฅผ ์ฌ์ฉํ๋ ๋์ ๋ชจ๋ ๋ก์ง์ด PeerJS ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์ฒด์์ ๋ง๋ค์ด์ง๋ฉฐ MQTT ๋ธ๋ก์ปค๋ง ์์ผ๋ฉด ๋ฉ๋๋ค. ๋ฐ๋ผ์ ์ฌ์ ํ ์๋ฒ๊ฐ ํ์ํ์ง๋ง MQTT๋ ํ์ค ํ๋กํ ์ฝ์ด๋ฏ๋ก ๋ธ๋ก์ปค๋ฅผ ์ค์ ํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค. ๋ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ํ์ํ์ง ์๊ฑฐ๋ ์๋ฒ ๋ฉ๋ชจ๋ฆฌ(์: v1)์ ์๋ฌด๊ฒ๋ ์ ์ฅ๋์ง ์์ผ๋ฏ๋ก ์์ ํ ํ์ฅ ๊ฐ๋ฅํฉ๋๋ค.
์ข์ ์์! ๋๋ ํ์คํ v1์์ v2๋ก ์ ํํ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๋ชจ๋ ๊ฒ์ด ํจ์ฌ ์ฌ์์ง๋๋ค. ๋งค์ฐ ๊ฐ์ฌํฉ๋๋ค!
๋๋ผ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
๋ค! ๋ฐฉ๊ธ ๊ทธ ๊ธฐ๋ฅ์ ๊ณํ์ ์ถ๊ฐํ์ต๋๋ค. ๊ตฌํํ๊ธฐ๊ฐ ๋งค์ฐ ์ฌ์์ผ ํฉ๋๋ค.
์ด๋ฏธ ํธ๋ค๋ฌ์ ์คํธ๋ฆผ์ ์ก์ธ์คํ ์ ์์ต๋๋ค. ๊ทธ๊ฒ์ ์ ๋ฌธ์ํ๋์ด ์์ง ์์ง๋ง, ๋น์ ์ด ๋งํ๋ฏ์ด ํผ์ด ๋น ํ๋์ ์๊ฒฉ ์คํธ๋ฆผ์ ์์ ํ๊ณ ์์ ์ ์๊ฒฉ ์คํธ๋ฆผ์ ํ ๋ฒ ์์ ํฉ๋๋ค. ์ด๋ ํ์ฌ ๋ชจ๋ ์ฐ๊ฒฐ์ ์ฌ์ฌ์ฉ๋๋ฉฐ ํ์ํ ๊ฒฝ์ฐ ๋์ค์ ๋ณ๊ฒฝ๋ ์ ์์ต๋๋ค.
์คํธ๋ฆผ์ ๋ณด๋ด๊ธฐ ์ ์ ์ฒ๋ฆฌํ๋ค๋ ๋ป์ ๋๊น? ๊ทธ๋ ๋ค๋ฉด ๊ตฌํ๋ ๊ฐ๋ฅํฉ๋๋ค.
์, ์ฐ๊ฒฐ๋ ํผ์ด๋น ํ๋์ฉ ์์ dataChannels๋ฅผ ์์ ํฉ๋๋ค. ์์์ ์ธ๊ธํ ๋ฉํ๋ฐ์ดํฐ ๊ธฐ๋ฅ๊ณผ๋ ์ ์๋ํฉ๋๋ค.
PeerJS๋ ์ด๊ธฐ ์ ํธ๋ฅผ ์ํํ๊ธฐ ์ํ ์ฑ๋์ด ํ์ํฉ๋๋ค. ํ์ง๋ง ์ด์ PeerServer๋ฅผ ์ฌ์ฉํ๋ ๋์ ๋ชจ๋ ๋ก์ง์ด PeerJS ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์ฒด์์ ๋ง๋ค์ด์ง๋ฉฐ MQTT ๋ธ๋ก์ปค๋ง ์์ผ๋ฉด ๋ฉ๋๋ค. ๋ฐ๋ผ์ ์ฌ์ ํ ์๋ฒ๊ฐ ํ์ํ์ง๋ง MQTT๋ ํ์ค ํ๋กํ ์ฝ์ด๋ฏ๋ก ๋ธ๋ก์ปค๋ฅผ ์ค์ ํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค. ๋ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ํ์ํ์ง ์๊ฑฐ๋ ์๋ฒ ๋ฉ๋ชจ๋ฆฌ(์: v1)์ ์๋ฌด๊ฒ๋ ์ ์ฅ๋์ง ์์ผ๋ฏ๋ก ์์ ํ ํ์ฅ ๊ฐ๋ฅํฉ๋๋ค.