๋ด ์๋ฒ ์ฝ์์ ์ ๋ชฉ์ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค. ๋ฌผ๋ก ์ฒ์์๋ ์์ฒด ์๋ฒ๋ฅผ ์คํํ์ง ์๊ณ ์๋ํ์ง๋ง ์๋์ผ๋ก ์คํจํ์ต๋๋ค(์ฆ, ์ฐ๊ฒฐ๋ ๊ฒ ๊ฐ์์ง๋ง ์ฐ๊ฒฐ์ด ์ด๋ฆฌ์ง ์์). ์ด ๋ชจ๋ ๊ฒ์ด localhost์์ ์คํ๋ฉ๋๋ค.
ํด๋ผ์ด์ธํธ ์ธก ์ฝ๋:
var peer
var conn
if (window.location.pathname == '/client') {
peer = new Peer('tactiks_guestb', {
host: 'localhost',
port: 8081,
path: '/peerjs'
})
conn = peer.connect('tactiks_hostb')
conn.on('open', () => {
conn.send('hi!');
});
this.peer = peer
this.conn = conn
conn.on('error', console.log)
peer.on('error', console.log)
} else {
peer = new Peer('tactiks_hostb', {
host: 'localhost',
port: 8081,
path: '/peerjs'
})
this.peer = peer
peer.on('error', console.log)
peer.on('connection', (conn) => {
conn.on('error', console.log)
this.conn = conn
conn.on('data', (data) => {
console.log(data)
})
})
}
์๋ฒ์ธก ์ฝ๋:
var express = require('express')
var app = express()
srv = app.listen(8081)
var ExpressPeerServer = require('peer').ExpressPeerServer;
var ps = ExpressPeerServer(srv, {
debug: true
})
app.use('/peerjs', ps)
ps.on('connection', (id) => {
console.log(id)
console.log(srv._clients)
})
@kahrkunne ํด๋ผ์ด์ธํธ/์๋ฒ์์ ์ด๋ค ๋ฒ์ ์ ์ฌ์ฉํ์ญ๋๊น?
์๋ฒ์์ ๋์ผํ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค. ํด๋ผ์ด์ธํธ์์ Peer Server ๋ฒ์ 0.2.10 ๋ฐ Peerjs ๋ฒ์ 1.1.0์ ์ฌ์ฉํ๊ณ ์์ต๋๋ค. ์๋ฒ๋ Electron์์ ์คํ๋๊ณ ํด๋ผ์ด์ธํธ๋ ๋ธ๋ผ์ฐ์ ์์ ์คํ๋ฉ๋๋ค(Chrome 77.0.3865.120 ๋ฐ Firefox 69.0.3 ๋ชจ๋ ํ ์คํธ).
ํด๋ผ์ด์ธํธ๊ฐ peer.connect(peerID)๋ฅผ ํธ์ถํ ๋ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค. ์๋ฒ์ ์ฐ๊ฒฐํฉ๋๋ค.
์ค๋ฅ๋ peer\lib\util.js:27์์ ๋ฐ์ํ๋ฉฐ ์ด๋ peer\lib\server.js ํ 91๋ก ๋ค์ ์ถ์ ๋ฉ๋๋ค.
if ๋ฌธ์ ๋ฉ์์ง๊ฐ CANDIDATE ๋๋ OFFER์ธ ๊ฒฝ์ฐ์๋ ํญ์ else๋ก ํด์๋๊ณ util.prettyError๋ฅผ ํ์ํฉ๋๋ค.
socket.on("message", function(data) {
try {
var message = JSON.parse(data);
if (
["LEAVE", "CANDIDATE", "OFFER", "ANSWER"].indexOf(message.type) !== -1
) {
self._handleTransmission(key, {
type: message.type,
src: id,
dst: message.dst,
payload: message.payload
});
} else {
util.prettyError("Message unrecognized");
}
} catch (e) {
self._log("Invalid message", data);
throw e;
}
});
util.prettyError("Message unrecognized");
}
} catch (e) {
self._log("Invalid message", data);
throw e;
}
์ ๋ฐ์ดํธ: ๋ชจ๋ ์ข ์์ฑ์ ์ ๋ฐ์ดํธํ๊ณ ๋ค์ ์คํํ์ต๋๋ค. ์ฌ์ ํ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ง๋ง ํ์ฌ HEARTBEAT์์๋ง ๋ฐ์ํ๋ ๊ฒ์ผ๋ก ๋ณด์ ๋๋ค. CANDIDATE ๋ฐ OFFER๊ฐ ์์๋๋ก ์๋ํฉ๋๋ค.
์ด ๋ฐฐ์ด์ ["LEAVE", "CANDIDATE", "OFFER", "ANSWER"]๋ ๋๋ฝ๋ ๋ฉ์์ง ์ด๋ฆ์ ์ถ๊ฐํฉ๋๋ค.... Peerjs์ ๊ฒฝ์ฐ HEARTBEAT๊ฐ ์์ต๋๋ค.
๋ฐ๋ผ์ HEARTBEAT๋ฅผ ["LEAVE", "CANDIDATE", "OFFER", "ANSWER","HEARTBEAT" ]๋ก ์ถ๊ฐํ ํ ๋ด ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋์์ต๋๋ค.
์ด ๋ฌธ์ ๋ ๊ณง ํด๊ฒฐ๋ ์์ ์ ๋๊น?
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์ด ๋ฐฐ์ด์ ["LEAVE", "CANDIDATE", "OFFER", "ANSWER"]๋ ๋๋ฝ๋ ๋ฉ์์ง ์ด๋ฆ์ ์ถ๊ฐํฉ๋๋ค.... Peerjs์ ๊ฒฝ์ฐ HEARTBEAT๊ฐ ์์ต๋๋ค.
๋ฐ๋ผ์ HEARTBEAT๋ฅผ ["LEAVE", "CANDIDATE", "OFFER", "ANSWER","HEARTBEAT" ]๋ก ์ถ๊ฐํ ํ ๋ด ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋์์ต๋๋ค.