์๋ ,
๋๋ socket.io๋ฅผ ์ฒ์ ์ฌ์ฉํ๊ณ socket.io๊ฐ ๋ ๊ฐ์ ์ฐ๊ฒฐ์ ์ ์งํ๋ ์ด์ ๊ฐ ๊ถ๊ธํฉ๋๋ค.
๋์์?
์ด๊ฑด ์ข ๋ฉ์ฒญํ์ง ์์?
socket.io 0.9์ ๋์์ ๋ ๊ฐ์ ์ด๋ฆฐ ์ ์ก์ด ์๋ ์ํฉ์ด ๋ฐ์ํ๋ฉด ๋ฒ๊ทธ์ผ ์ ์์ผ๋ฉฐ ์ด๋ฅผ ์ฌํํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์ถ๊ฐ ์ ๋ณด๋ฅผ ์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค.
"XHR ํด๋ง"์ ์ฐ๊ฒฐ์ด ์๋๋ฉฐ ๋ ์ด์์ ์ฐ๊ฒฐ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๋ค, ํ์ง๋ง ํด๋ง์ ๋ชจ๋ ์์ฒญ์ด ๋์ผํ URL์์ ์๋ํ๊ธฐ ๋๋ฌธ์ ๋๋ค. ๋๋ ๊ทธ๊ฒ์ด ํ๋๋ฅผ ๋ชจ๋ฐฉํด์ผํ๋ค๊ณ ๊ฐ์ ํฉ๋๋ค.
socket.io 0.9์ ๋์์ ๋ ๊ฐ์ ์ด๋ฆฐ ์ ์ก์ด ์๋ ์ํฉ์ด ๋ฐ์ํ๋ฉด ๋ฒ๊ทธ์ผ ์ ์์ผ๋ฉฐ ์ด๋ฅผ ์ฌํํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์ถ๊ฐ ์ ๋ณด๋ฅผ ์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค.
์ฐ๋ฆฌ๊ฐ ๊ฐ์ ์๋ฏธ์ธ์ง ํ์คํ์ง ์์ง๋ง Chromium์ ์ด๋ฆฐ ์น ์์ผ ์ฐ๊ฒฐ์ ๋ณด์ฌ์ฃผ๊ณ ๋ํ socket.io์ ํด๋ง ์์ฒญ์ ๋ณด๋ด๊ณ ์์ต๋๋ค.
"๋ฐ๋ณด"๋ ์ด์ ์ฌ์ฉ ๊ฐ๋ฅํ ์น ์์ผ ์ฐ๊ฒฐ ๋ฐ ํด๋ง์ ์ด์ ์ ๋ฐ๋ฅผ ์ ์์์ ์๋ฏธํฉ๋๋ค.
websocket ์ฐ๊ฒฐ ์์ฒด๋ก ์ถฉ๋ถํ๊ณ xhr ํด๋ง์ ํด๋ฐฑ์ผ๋ก๋ง ์ฌ์ฉ๋์ด์ผ ํ์ง ์์ต๋๊น?
๋ด๊ฐ ๋ญ๊ฐ๋ฅผ ๋์น ๊ฒฝ์ฐ ๋๋ฅผ ์์
@bodokaiser ๋ websocket ์ฐ๊ฒฐ์ด ์ค์ ๋ก ์๋
ํธ๋์ ฐ์ดํฌ๋ ์ผ๋ฐ HTTP์ ๋๋ค.
Chrome ์น ์์ผ ์ฐ๊ฒฐ์ด ๋ณด๋ฅ ์ค์ด๋ผ๊ณ ํ์ํฉ๋๋ค. ์ค๋ฅ ๋ฉ์์ง๊ฐ ์์ต๋๋ค. ๋๋ ws๊ฐ ์๋ํ๋ค๊ณ ๊ฐ์ ํฉ๋๋ค. ๊ทธ๋ผ์๋ ๋ถ๊ตฌํ๊ณ socket.io๊ฐ ํด๋ฐฑ๋๋์ง ์ด๋ป๊ฒ ํ์ธํ ์ ์์ต๋๊น?
๋ค, ํ์คํ ์ ์๋ ์๋๋๋ค. ํฌ๋กฌ๊ณผ ๋ ธ๋ ์ฝ์์์ get ์์ฒญ์ด 2000ms๋ง๋ค ์ด๋ป๊ฒ ๋ฐ๋ณต๋๋์ง ๋ด ๋๋ค.
node.js ๋ก๊น ์ด ๋์์ด ๋ ๊น์?
๋ฌธ์ ์ธ์ฌ
ws ์ฐ๊ฒฐ์์ ๊ตํ๋ ํ๋ ์์ ๊ฒ์ฌํฉ๋๋ค(Chrome์๋ง ์๋ ๊ฒ ๊ฐ์ต๋๋ค). ๋ฐ์ดํฐ๊ฐ ํ์๋์ง ์์ผ๋ฉด ์๋ํ์ง ์์ ๊ฒ์ ๋๋ค.
์, ์ง์ํ๋ ๊ฒ ๊ฐ์ต๋๋ค.
debug - client authorized
info - handshake authorized yUEmr7drZfmWzWHdEZcp
GET /socket.io/1/?t=1344799805756 200 3ms
debug - setting request GET /socket.io/1/xhr-polling/yUEmr7drZfmWzWHdEZcp?t=1344799815866
debug - setting poll timeout
debug - client authorized for
debug - clearing poll timeout
debug - xhr-polling writing 1::
debug - set close timeout for client yUEmr7drZfmWzWHdEZcp
GET /socket.io/1/xhr-polling/yUEmr7drZfmWzWHdEZcp?t=1344799815866 200 1ms
debug - xhr-polling received data packet 5:::{"name":"hello","args":["world"]}
POST /socket.io/1/xhr-polling/yUEmr7drZfmWzWHdEZcp?t=1344799815871 200 1ms
debug - setting request GET /socket.io/1/xhr-polling/yUEmr7drZfmWzWHdEZcp?t=1344799815872
debug - setting poll timeout
debug - discarding transport
debug - cleared close timeout for client yUEmr7drZfmWzWHdEZcp
debug - clearing poll timeout
debug - xhr-polling writing 8::
debug - set close timeout for client T9eCOR7gCe3pLNtiEZco
debug - xhr-polling closed due to exceeded duration
GET /socket.io/1/xhr-polling/T9eCOR7gCe3pLNtiEZco?t=1344799800945 200 20002ms
debug - clearing poll timeout
debug - xhr-polling writing 8::
debug - set close timeout for client yUEmr7drZfmWzWHdEZcp
debug - xhr-polling closed due to exceeded duration
@guille ๋์ฒด ์ด์ ๋ฅผ
์ด๋ค ๋ธ๋ผ์ฐ์ ๋ฅผ ์ฌ์ฉํ๊ณ ์์ต๋๊น?
Mac OSX์ฉ ํฌ๋กฌ 21
Chrome 21/Windows 21.0.1180.79 m์์๋ ๋์ผํ ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค. ์ฐ๊ฒฐ๋์ง ์๋ ๋์ WebSocket ์ฐ๊ฒฐ์ด ์๋ JSONP ํด๋ง ์ฐ๊ฒฐ(์ฑ๊ณต์ ์ผ๋ก ๋ณด์)์ด ์์ต๋๋ค. ์ด ์ฐ๊ฒฐ์ ํญ์ "๋ณด๋ฅ ์ค" ์ํ์ ๋๋ค. Mac์์ ๋์ผํ ๋ฒ์ ์ Chrome์ ์ฌ์ฉํด๋ ๊ด์ฐฎ์ต๋๋ค.
์ด๊ฒ์ ๋ฐฉํ๋ฒฝ์ด๋ ๋ฐ์ด๋ฌ์ค ๋ฐฑ์ ๊ณผ ๊ด๋ จ๋ ๊ฒ์ผ๋ก ๋ณด์ด์ง ์์ผ๋ฉฐ ๋ชจ๋ ํ ์คํธ๋ websocketstest.org ๋ฐ websocket.org/echo.html์ ํต๊ณผํฉ๋๋ค.
๋๋ socket.io 0.9๋ฅผ ์ฌ์ฉํ๊ณ ์์ง๋ง ์ต์ ๋ฒ์ ์๋ ์กด์ฌํ๋ ๊ฒ ๊ฐ์ต๋๋ค.
@guille ์ด ๋ฌธ์ ๋ ์ฌํํ๊ธฐ ์ฌ์ด ๊ฒ ๊ฐ์ต๋๋ค. ๋ฐฉ๊ธ socket.io์ WebSocket ์ ์ก์ ์ฌ์ฉํ๋ ์ฌ์ดํธ๋ฅผ ๋ฐฉ๋ฌธํ์ต๋๋ค.
์ ์ด๋ Windows์ Chrome 21์์๋ WS ์ฐ๊ฒฐ ์ํ๊ฐ ํญ์ "๋๊ธฐ ์ค"์ ๋๋ค.
socket.io ๋ง์คํฐ๋ก ์๋ ํ์๊ฒ ์ต๋๊น?
๋ฐฉ๊ธ ๋ง์คํฐ๋ฅผ ์๋ํ๋๋ฐ ๋์ผํ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ์ด ๋ฌธ์ ๋ #998์ ์์์์ผ ์๋ ์์ต๋๋ค.
๋ํ ๊ฐ์น๊ฐ ์๋ค๋ ์ ์์ #998์ ์ค๋ช ๋ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์น ์์ผ์ ๋นํ์ฑํํ๊ณ xhr ๋ฐ jsonp ํด๋ง๋ง ์ฌ์ฉํ์ฌ ์ฐ๊ฒฐ์ ์ค์ ํ๋ ๋ฐ ํจ๊ณผ์ ์ด์์ต๋๋ค.
์ด๊ฒ์ ์ค์ ๋ก ํฌ๋กฌ ๋ฒ๊ทธ์ ๋๊น?
www.websocket.org/echo.html ์์ ํ ์คํธ๋ฅผ ํ ๋
์ฌ๋ฏธ์๋ ์ ์ ๋์ผํ ์น ์ฌ์ดํธ์์ "๋ณด์ WebSocket(TLS)"์ ์ฌ์ฉํ๋ฉด websocket์ด ์๋ํ๋ค๋ ๊ฒ์ ๋๋ค.
Chrome๊ณผ Firefox ๋ชจ๋์์ ์ ํํ ๊ฐ์ ๋์์ ๋๋ค. ๋งค์ฐ ์ด์ํฉ๋๋ค.
์ฌ๊ธฐ๋ ์ฌ๋:
socket.on('loginout',function(){
socket.emit('loginout',{uname:socket.name});
});
socket.on('๋ก๊ทธ์ธ',ํจ์(๋ฐ์ดํฐ){
socket.emit('l_msg',{uname:data.uname,score:data.score,์ ํ:true});
});
์ธ์:
์ ๋ณด: ์
์ ์ธ์ฆ 11012331592122282453
๋๋ฒ๊ทธ: ์ค์ ์์ฒญ GET /socket.io/1/xhr-polling/11012331592122282453?t=1353485202761
๋๋ฒ๊ทธ: ํด๋ง ์๊ฐ ์ด๊ณผ ์ค์
๋๋ฒ๊ทธ: ์น์ธ๋ ํด๋ผ์ด์ธํธ
๋๋ฒ๊ทธ: ํด๋ง ์๊ฐ ์ด๊ณผ ์ง์ฐ๊ธฐ
๋๋ฒ๊ทธ: xhr-polling ์ฐ๊ธฐ 1::
๋๋ฒ๊ทธ: ํด๋ผ์ด์ธํธ 11012331592122282453์ ๋ํ ๋ซ๊ธฐ ์๊ฐ ์ด๊ณผ ์ค์
๋๋ฒ๊ทธ: xhr-polling ์์ ๋ฐ์ดํฐ ํจํท 20.5:::{"name":"count"}.22.5:::{"name":"history"}.23.5:::{"name ":"์ฌ์ฉ์ ๋ชฉ๋ก"}
๋๋ฒ๊ทธ: ์ค์ ์์ฒญ GET /socket.io/1/xhr-polling/11012331592122282453?t=1353485202792
๋๋ฒ๊ทธ: ํด๋ง ์๊ฐ ์ด๊ณผ ์ค์
๋๋ฒ๊ทธ: ์ ์ก ํ๊ธฐ
๋๋ฒ๊ทธ: ํด๋ผ์ด์ธํธ 11012331592122282453์ ๋ํ ๋ซ๊ธฐ ์๊ฐ ์ด๊ณผ๋ฅผ ์ง์ ์ต๋๋ค.
๋๋ฒ๊ทธ: ํด๋ง ์๊ฐ ์ด๊ณผ ์ง์ฐ๊ธฐ
๋๋ฒ๊ทธ: xhr-polling ์ฐ๊ธฐ 8::
๋๋ฒ๊ทธ: ํด๋ผ์ด์ธํธ 1896586469607627233์ ๋ํ ๋ซ๊ธฐ ์๊ฐ ์ด๊ณผ ์ค์
๋๋ฒ๊ทธ: ์ด๊ณผ๋ ๊ธฐ๊ฐ์ผ๋ก ์ธํด xhr-polling์ด ์ข
๋ฃ๋์์ต๋๋ค.
๋๋ฒ๊ทธ: xhr ํด๋ง ์์ ๋ฐ์ดํฐ ํจํท 5:::{"name":"login","args":[{"uname":"gjjn","pwd":"3f01728152a0225ff9806c401ffdbe77"}]}
๋๋ฒ๊ทธ: ํด๋ง ์๊ฐ ์ด๊ณผ ์ง์ฐ๊ธฐ
๋๋ฒ๊ทธ: xhr ํด๋ง ์ฐ๊ธฐ 5:::{"name":"l_msg","args":[{"uname":"gjjn","type":true,"head":" http://42.121. 14.234/์ ์๋์ง ์์ "}]}
๋๋ฒ๊ทธ: ํด๋ผ์ด์ธํธ 11012331592122282453์ ๋ํ ๋ซ๊ธฐ ์๊ฐ ์ด๊ณผ ์ค์
๋๋ฒ๊ทธ: xhr-polling ์์ ๋ฐ์ดํฐ ํจํท 5:::{"name":"loginout"}
๋๋ฒ๊ทธ: websocket ์ฐ๊ธฐ 5:::{"name":"l_msg","args":[{"uname":"gregergre","type":true,"head":" http://42.121.14.234/ ์ ์๋์ง ์์ "}]}
๋๋ฒ๊ทธ: ํด๋ผ์ด์ธํธ 5207531891749391108์ ๋ํ ํํธ๋นํธ ๋ฐฉ์ถ
๋๋ฒ๊ทธ: websocket ์ฐ๊ธฐ 2::
๋๋ฒ๊ทธ: ํด๋ผ์ด์ธํธ 5207531891749391108์ ๋ํ ํํธ๋นํธ ์๊ฐ ์ด๊ณผ ์ค์
๋๋ฒ๊ทธ: ํํธ๋นํธ ํจํท์ ๋ฐ์์ต๋๋ค.
๋๋ฒ๊ทธ: ํด๋ผ์ด์ธํธ 5207531891749391108์ ๋ํ ํํธ๋นํธ ์๊ฐ ์ด๊ณผ๊ฐ ์ง์์ก์ต๋๋ค.
๋๋ฒ๊ทธ: ํด๋ผ์ด์ธํธ 5207531891749391108์ ๋ํ ํํธ๋นํธ ๊ฐ๊ฒฉ ์ค์
๋๋ฒ๊ทธ: websocket ์ฐ๊ธฐ 5:::{"name":"loginout","args":[{}]}
xhr-polling์ด ๋ฐ์ดํฐ ํจํท 5:::{"name":"loginout"}๋ฅผ ์์ ํ์ต๋๋ค.
๊ทธ๋ฌ๋ ๊ฒฐ๊ณผ๋ ์๋๋๋ค.
์ฌ๊ธฐ๋ ๋ง์ฐฌ๊ฐ์ง์ ๋๋ค. ๋์ผํ ์ฝ๋๋ฅผ ์ฌ์ฉํ์ง๋ง Chrome MacOS์์๋ ์๋ํ์ง๋ง Chrome Windows์์๋ ์๋ํ์ง ์์ต๋๋ค.
๋ฒ์ ๋ฐฉ๋ฒ - https://gist.github.com/jonnsl/5021596
+1, ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ญ์์ค.. @LearnBoost
๋๋ ์ด๊ฒ์๋ณด๊ณ ์์ง๋ง ๋ด ๊ฒฐ๊ตญ์๋ Websocket ์ฐ๊ฒฐ๊ณผ SOCKET.io ์๋ฒ๋ก ๋ณด๋ด์ง ๋ฐ๋ณต๋๋ XHR ์์ฒญ์ผ๋ก ๋ด ๋๋ค.
์น ์์ผ ์ฐ๊ฒฐ์ด ์ฑ๊ณตํ ๊ฒ์ฒ๋ผ ๋ณด์ด์ง๋ง XHR ์์ฒญ์ด ํ์๋ฉ๋๋ค.
Request URL:ws://localhost:5000/socket.io/?EIO=2&transport=websocket&sid=XcMblHoZ0x97QRn_AAAE
Request Method:GET
Status Code:101 Switching Protocols
Request Headers CAUTION: Provisional headers are shown.
Cache-Control:no-cache
Connection:Upgrade
Cookie:io=XcMblHoZ0x97QRn_AAAE
Host:localhost:5000
Origin:http://localhost:3000
Pragma:no-cache
Sec-WebSocket-Extensions:permessage-deflate; client_max_window_bits, x-webkit-deflate-frame
Sec-WebSocket-Key:EZixwYoUHpFFpgrEOqiS+w==
Sec-WebSocket-Version:13
Upgrade:websocket
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36
Query String Parametersview sourceview URL encoded
EIO:2
transport:websocket
sid:XcMblHoZ0x97QRn_AAAE
Response Headers
Connection:Upgrade
Sec-WebSocket-Accept:WHsiBZoW9stmULt+YX8wmNK1wx8=
Upgrade:websocket
์น ์์ผ ํ๋ ์์ ๋ชจ์์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
https://www.dropbox.com/s/v6szg9hka53erbc/Screenshot%202014-07-09%2011.12.33.png
๊ทธ๋ฆฌ๊ณ ๊ธด ํด๋ง ์์ฒญ
https://www.dropbox.com/s/pf7d56tp85864bg/Screenshot%202014-07-09%2011.15.47.png
Google Chrome 35.0.1916.153์์ ์คํ ์ค์ ๋๋ค.
์์ผ ๋ฌธ์ ๋ฒ์ ์ [email protected]
๊ฐ์ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ์ ๋ฐ์ดํธ๊ฐ ์์ต๋๊น? SocketIO 1.0.6 ์ฌ์ฉ
์ฒซ ๋ฒ์งธ ์์ฒญ์ ํญ์ XHR์ด๊ณ , ๊ทธ๋ฐ ๋ค์ (๊ฐ๋ฅํ ๊ฒฝ์ฐ) WebSocket์ผ๋ก _์ ๊ทธ๋ ์ด๋_ํฉ๋๋ค. ํ์ ํด๋ง์ด ์ค๋จ๋จ(๊ฒฝ์ฐ์ ๋ฐ๋ผ ์ถ๊ฐ ํด๋ง ์ฃผ๊ธฐ๊ฐ ์์ ์ ์์ง๋ง 1์ ๋์ง ์์)
@guille ๋ด๊ฐ ํ์ธํ ๊ฒ์
์๋ ,
์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ํด๊ฒฐ์ฑ ์ ๋ฌด์์ ๋๊น?
@rohittailor : ํด๋ผ์ด์ธํธ์์ ์ด๊ฒ์ ํ ์คํธํ๊ณ ์์ต๋๋ค.
<script src="/socket.io/socket.io.js"></script>
<script>
var socket = io.connect({transports: ['websocket']});
</script>
๊ทธ๋ฆฌ๊ณ ์ง๊ธ๊น์ง ๋๋ฌด ์ข์ต๋๋ค. XHR ์ฐ๊ฒฐ์ ์์ ํ ํผํ๊ณ ์์ต๋๋ค.
์ด๊ฒ์ ๋ด ๋ฌธ์ ๋ ํด๊ฒฐํ๊ณ websocket์ ์ ์๋ํ์ง๋ง ๋๋ฌ์ด XHR ํด๋ง๋์์์ต๋๋ค. @gonzalodiaz ๊ฐ์ฌ
WS๋ก ์ฑ๊ณต์ ์ผ๋ก ์ ๊ทธ๋ ์ด๋ํ์ง๋ง Web Inspector์์ XHR ํด๋ง ์ฃผ๊ธฐ๊ฐ ๋ฌด๊ธฐํ ๊ณ์๋๋ ์๋๋ฆฌ์ค๋ฅผ ๋ณด๊ณ ์ถ์ต๋๋ค!
(๋ฐ๋ชจ, ๋น๋์ค, ์ ๋๋ฉ์ด์ GIF, ๋ฌด์์ด๋ ์๋)
๋ด์ผ MS Azure ํด๋ผ์ฐ๋์์ ํธ์คํ ๋๋ ๋ด ์น ์ฌ์ดํธ์ ๋ํ ๋ฐ๋ชจ ์ก์ธ์ค๋ฅผ ์ ๊ณตํ ์ ์์ต๋๋ค. ํ ์คํธ URL๊ณผ socket.io๊ฐ ํธ์คํ ๋๋ ๋ฐฉ์์ ๋ํ ์์ธํ ์ ๋ณด๋ฅผ ์๋ ค์ฃผ์ค ์ ์์ต๋๊น?
@guille ์ด๊ฑด ์ด๋
์น ์์ผ ํ๋ ์์ ๋ชจ์์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
https://www.dropbox.com/s/v6szg9hka53erbc/Screenshot%202014-07-09%2011.12.33.png
๊ทธ๋ฆฌ๊ณ ๊ธด ํด๋ง ์์ฒญ
https://www.dropbox.com/s/pf7d56tp85864bg/Screenshot%202014-07-09%2011.15.47.png
๊ทธ๊ฒ๋ค์ ๋ฌดํ์ ๊ณ์๋ฉ๋๊น? ์ ์ค๋ณต ํ๋ ์์ด ์์ต๋๊น?
์๋ต? DEBUG=*์ ํจ๊ป ํด๋น ์๋ฒ ๋ก๊ทธ๋ฅผ ๊ฒ์ํ ์ ์์ต๋๊น?
์ด ์ํฉ์ด ๋ฐ์ํ๋ฉด localStorage.debug='*'
์ ํจ๊ป ๋ธ๋ผ์ฐ์ ๋ก๊ทธ๊ฐ ๋ฐ์ํฉ๋๊น?
โ
๊ธฐ์๋ฅด๋ชจ ๋ผ์ฐํ โ @rauchg https://twitter.com/rauchg
2014๋
10์ 14์ผ ํ์์ผ ์คํ 10์ 59๋ถ, Viren Negi [email protected]
์ผ๋ค:
@guille https://github.com/guille ์ด๊ฑด ์ด๋
์น ์์ผ ํ๋ ์์ ๋ชจ์์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
https://www.dropbox.com/s/v6szg9hka53erbc/Screenshot%202014-07-09%2011.12.33.png
๊ทธ๋ฆฌ๊ณ ๊ธด ํด๋ง ์์ฒญ
https://www.dropbox.com/s/pf7d56tp85864bg/Screenshot%202014-07-09%2011.15.47.png
โ
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ฑฐ๋ GitHub์์ ํ์ธํ์ธ์.
https://github.com/Automattic/socket.io/issues/991#issuecomment -59161273
.
@guille ๋๋ xhr ์๋ต์ด ๋ฌดํ์ ๋ฐ๋ณต๋๋ ๊ฒ์ ๋ด ๋๋ค. ๋ณต์ ํ๋ ์์ ๋ํด ํ์ ์ด
๋ด๊ฐ ์ผ๋ง๋ ๋์์ด ๋ ์ ์์์ง๋ ๋ชจ๋ฅด๊ฒ ์ง๋ง ์น ์์ผ์ด ์์ ํ ๊ฒฝ์ฐ์๋ง ์ฐ๊ฒฐํ ์ ์๋ค๋ ๊ฒ์ ์๊ฒ ๋์์ต๋๋ค. ๋ณด์๋์ง ์์ WebSocket ์ฐ๊ฒฐ์ ํ์ฉํ๊ธฐ ์ํด ํค๋(CORS์ ๊ฐ์)๊ฐ ํ์ํ ์ต๊ทผ ๋ณด์ ๋ณ๊ฒฝ ์ฌํญ์ด ์์ต๋๊น?
WebSockets๋ ํ ๋ฌ ์ ์ ์ ๋ฅผ ์ํด ์ผํ์ง๋ง ์ด์ ๋ wss:// ์ฐ๊ฒฐ์์๋ง ์๋ํฉ๋๋ค.
ํฌ๋กฌ 38.0.2125.104 - ์๋์ฐ 8.1.1
ํธ์ง: ์ด ๊ฒฐ๊ณผ๋ ์ค์ ๋ก http://www.websocket.org/echo.html ์ ๋ฌธ์ ์ผ ์ ์์ต๋๋ค
๋ค๋ฅธ ๊ณณ์์ ํ
์คํธ๋ฅผ ํ ์ ์์์ต๋๋ค
WS ์ฐ๊ฒฐ์ ์ฑ๊ณต์ ์ค์ ๋ก ๋คํธ์ํฌ/์๋ฒ ๊ธฐ๋ฅ์ ๋ฌ๋ ค ์์ต๋๋ค. SSL์ ๋ฐ์ดํฐ๊ฐ ํด๋ ๋๊ธฐ ์ ์ ๋ฐ์ดํฐ๋ฅผ ์์์ํฌ ์ ์์์ ๋ณด์ฅํฉ๋๋ค(ํ์ ํ๋ก์/๋ก๋ ๋ฐธ๋ฐ์๋ ์ฌ์ ํ ์์๋ ์ ์์).
๋๋ ๊ทธ๊ฒ์ด ์ค์ ๋ก ์ฝ๋์ ๋ฒ๊ทธ๋ผ๋ ๊ฒ์ ์์์ฐจ๋ ธ๊ณ , WS ์ฐ๊ฒฐ์ ํด๋งํ์ง๋ ์์๊ณ , ๋ณ๊ฒฝ์ ํ ๋ค์ ์๋ํ์ต๋๋ค. ๊ธฐ์ต๋๋ฉด ์ค๋ ๋ฐค ์์ ๋ ์์ค๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
๊ทธ๋ฌ๋ ๋ค๋ฅธ ๋ชจ๋ ์ฌ๋์๊ฒ ์๋ํ๋ ๊ฒฝ์ฐ ๋ด ์ค์ ์ ์๋ชป๋ ๋ค๋ฅธ ๊ฒ์ผ ์ ์์ง๋ง ์๋ํ์ง ์๊ณ WS๋ฅผ ์ฌ์ฉํ ์ ์๋ค๊ณ ์๊ฐํ์ฌ ์ฐ๊ฒฐ์ ์๋ํ์ง ์์์ต๋๋ค. &&๋ฅผ || ๊ณ ์ณค๋ค.
๋ ๋ฃ๊ณ ์ถ์ด์!
์ฌ์ ํ (์์) ๋ฌธ์ ์ด์ง๋ง ํด๋ผ์ด์ธํธ๋ ๋ค๋ฅธ ์ ์ก์ ์๋ํ๋ ๋์ ํญ์ ํด๋ง ์์ฒญ์ ํฉ๋๋ค. ์ง์ ํด์ผ ํฉ๋๋ค
{transports: ['websocket']}
์๋์ํค๋ ค๋ฉด ํด๋ผ์ด์ธํธ๊ฐ ๋ชจ๋ ์ ์ก์ ์๋ํ์ฌ ์ข์ ์ ์ก์ ์ฐพ์์ผ ํฉ๋๋ค. ๊ทธ๋ ์ฃ ?
์ด ๋ฌธ์ ๋ ์ ๊ฐ 2012/13๋ ์ "์์ํ" ์น ์์ผ ํจํค์ง ์์ ์ ์์ํ ์ด์ ์์ต๋๋ค.
์ด ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋์์ต๋๊น? ๋น์ทํ ๊ฒ์ ๋ณด๊ณ ์์ง๋ง ๊น์ด ํ๊ณ ๋ค๊ธฐ ์ ์ ๋น ๋ฅธ ๊ฒ์์ ํ๊ณ ์ถ์์ต๋๋ค... ๋๊ธ?
์ด ๋ฌธ์ ์ ๋ํด ๋ง์ง๋ง์ผ๋ก ์ธ๊ธํ ์ดํ๋ก ์ฝ๋๊ฐ ์๋นํ ๋ณ๊ฒฝ๋์์ต๋๋ค. ๊ฐ์ ๋ฒ๊ทธ์ผ ๊ฐ๋ฅ์ฑ์ ๊ฑฐ์ ์์ต๋๋ค. ์ง๋๋ฒ์ ๋ฌธ์ ๋ฅผ ์ผ์ผํจ ๊ฒ์ผ๋ก ์์ฌ๋๋ ํ์ ์ ์ฐพ์ ์ ์๋ ๊ฒ ๊ฐ์ต๋๋ค. ๊ทธ๋ ๋ค๊ณ ๊ณ ์ ์ด ๋๋ ๊ฒ์ ์๋๋๋ค.
๋ด socket.io ์ฝ๋๋ ํ์ฌ bug engine.io-client์ ์ํด ์ฐจ๋จ๋์ด ์์ผ๋ฏ๋ก ๋ช ๋ฌ ๋์ s.io๋ฅผ ์ฌ์ฉํ์ง ์์์ผ๋ฏ๋ก ์ด๊ฒ์ด ์ฌ์ ํ ๋ฌธ์ ์ธ์ง ํ์คํ๊ฒ ๋งํ ์ ์์ต๋๋ค.
@nevercast ws๊ฐ ์๋ํ๋ ๊ฒ์ ๋ํ ๊ทํ์ ์๊ฒฌ์ด์ง๋ง ws not์ ์ ๊ฒฝ์ฐ์๋ ์์ ํ ์ณ์ง ์์์ต๋๋ค. ์ง์ ํด ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค. ์ผ์ฃผ์ผ ๋๊ฒ ์ด ๋ฌธ์ ๋ฅผ ์ฐพ๊ณ ์์์ต๋๋ค. ์ด๋ป๊ฒ ๋ ๋ด ๋คํธ์ํฌ์ ๋ชจ๋ ws ์ฐ๊ฒฐ์ด ์ฐจ๋จ๋์์ง๋ง wss๊ฐ ์ ๋๋ก ์๋ํ์์ ๋ฐ๊ฒฌํ์ต๋๋ค.
์ด ์น์ฌ์ดํธ๋ ํ๋ฅญํฉ๋๋ค: http://websocketstest.com/ ์ด๋ค ํฌํธ๊ฐ ์ฃผ์ด์ง ๋คํธ์ํฌ์์ ์น ์์ผ์ ์คํํ ์ ์๋์ง ์๋ ค์ค๋๋ค. ์น ์์ผ ๋๋ฒ๊น ์ ๋๋ฌด ๊ด์ฌํ๊ธฐ ์ ์ ์ด๊ฒ์ ํ์ธํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
์์ผ io์ ๋ฌธ์ ๊ฐ ์์ง๋ง ์ด๋๊ฐ ์๋ชป๋์๋์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
์์ ์ด๋ฏธ์ง๋ ๋ก์ปฌ์์๋ ์ ๋๋ ๊ฒ์ ๋ณด์ฌ์ฃผ์ง๋ง ์๋ ์ด๋ฏธ์ง๋ AWS ํ๊ฒฝ์์ ์๋ํ๋ค๊ฐ ์บก์ณํ ๊ฒ์ ๋๋ค.
์์ผ io์ ๋ฌธ์ ๊ฐ ์์ง๋ง ์ด๋๊ฐ ์๋ชป๋์๋์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
์์ ์ด๋ฏธ์ง๋ ๋ก์ปฌ์์๋ ์ ๋๋ ๊ฒ์ ๋ณด์ฌ์ฃผ์ง๋ง ์๋ ์ด๋ฏธ์ง๋ AWS ํ๊ฒฝ์์ ์๋ํ๋ค๊ฐ ์บก์ณํ ๊ฒ์ ๋๋ค.
๊ฐ์ ๋ฌธ์ ์ ์ง๋ฉด
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
@rohittailor : ํด๋ผ์ด์ธํธ์์ ์ด๊ฒ์ ํ ์คํธํ๊ณ ์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ง๊ธ๊น์ง ๋๋ฌด ์ข์ต๋๋ค. XHR ์ฐ๊ฒฐ์ ์์ ํ ํผํ๊ณ ์์ต๋๋ค.