Socket.io-client: 전솑은 μ›Ή μ†ŒμΌ“ λŒ€μ‹  폴링으둜 κΈ°λ³Έ μ„€μ •λ˜μ–΄ μžˆμŠ΅λ‹ˆκΉŒ?

에 λ§Œλ“  2015λ…„ 09μ›” 11일  Β·  9μ½”λ©˜νŠΈ  Β·  좜처: socketio/socket.io-client

socket.io.js의 1613행은 λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.
this.transport = opts.transport || ['폴링', 'μ›Ήμ†ŒμΌ“'];

['websocket', 'polling'] μˆœμ„œκ°€ μ•„λ‹Œ μ΄μœ λŠ” λ¬΄μ—‡μž…λ‹ˆκΉŒ?

λ‚΄κ°€ν•˜κ³ μžˆλŠ” ν΄λΌμ΄μ–ΈνŠΈ μΈ‘μ—μ„œ :
var μ†ŒμΌ“ = io.connect(url);

그런 λ‹€μŒ μ„œλ²„ μΈ‘μ—μ„œ λ‹€μŒμ„ μˆ˜ν–‰ν–ˆμŠ΅λ‹ˆλ‹€.
io.on('μ—°κ²°', ν•¨μˆ˜(μ†ŒμΌ“){
console.log(μ†ŒμΌ“);
});

ν•Έλ“œμ…°μ΄ν¬ 뢀뢄은 λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

handshake: 
   { headers: 
      { 'user-agent': 'node-XMLHttpRequest',
        accept: '*/*',
        host: 'localhost:8081',
        connection: 'close' },
     time: 'Fri Sep 11 2015 16:04:39 GMT-0400 (EDT)',
     address: '::ffff:127.0.0.1',
     xdomain: false,
     secure: false,
     issued: 1442001879771,
     url: '/socket.io/?EIO=3&transport=polling&t=1442001879749-0&b64=1',
     query: { EIO: '3', transport: 'polling', t: '1442001879749-0', b64: '1' } }

이것은 μ›Ή μ†ŒμΌ“ λŒ€μ‹  폴링을 μ‚¬μš©ν•˜κ³  μžˆμŒμ„ μ˜λ―Έν•©λ‹ˆκΉŒ?

전솑을 'websocket'으둜 λͺ…μ‹œμ μœΌλ‘œ μ„€μ •ν•˜λ €κ³  μ‹œλ„ν–ˆλŠ”λ° ν•Έλ“œμ…°μ΄ν¬ 뢀뢄이 λ‹€μŒκ³Ό 같이 μ˜¬λ°”λ₯΄κ²Œ λ³€κ²½λ˜μ—ˆμŠ΅λ‹ˆλ‹€.
var μ†ŒμΌ“ = io.connect(url,{transport:['μ›Ή μ†ŒμΌ“']});

handshake: 
   { headers: 
      { connection: 'Upgrade',
        upgrade: 'websocket',
        host: 'localhost:8081',
        origin: 'localhost:8081',
        'sec-websocket-version': '13',
        'sec-websocket-key': 'MTMtMTQ0MjAwMTUxNDcyNA==' },
     time: 'Fri Sep 11 2015 15:58:34 GMT-0400 (EDT)',
     address: '::ffff:127.0.0.1',
     xdomain: true,
     secure: false,
     issued: 1442001514739,
     url: '/socket.io/?EIO=3&transport=websocket',
     query: { EIO: '3', transport: 'websocket' } }

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

+1
λ‚˜λŠ” "μ—…κ·Έλ ˆμ΄λ“œ"보닀 "λ‹€μš΄κ·Έλ ˆμ΄λ“œ"λΌλŠ” κ°œλ…μ„ μ„ ν˜Έν•©λ‹ˆλ‹€. ν˜„μž¬ λŒ€λΆ€λΆ„μ˜ λΈŒλΌμš°μ €λŠ” μ›Ή μ†ŒμΌ“μ„ 잘 μ§€μ›ν•©λ‹ˆλ‹€. μ²˜μŒμ— μ›Ή μ†ŒμΌ“κ³Ό μ—°κ²°ν•˜λ©΄ μ„±λŠ₯이 ν–₯μƒλ˜κ³  λ¦¬μ†ŒμŠ€κ°€ μ ˆμ•½λ©λ‹ˆλ‹€.

λͺ¨λ“  9 λŒ“κΈ€

+1
λ‚˜λŠ” "μ—…κ·Έλ ˆμ΄λ“œ"보닀 "λ‹€μš΄κ·Έλ ˆμ΄λ“œ"λΌλŠ” κ°œλ…μ„ μ„ ν˜Έν•©λ‹ˆλ‹€. ν˜„μž¬ λŒ€λΆ€λΆ„μ˜ λΈŒλΌμš°μ €λŠ” μ›Ή μ†ŒμΌ“μ„ 잘 μ§€μ›ν•©λ‹ˆλ‹€. μ²˜μŒμ— μ›Ή μ†ŒμΌ“κ³Ό μ—°κ²°ν•˜λ©΄ μ„±λŠ₯이 ν–₯μƒλ˜κ³  λ¦¬μ†ŒμŠ€κ°€ μ ˆμ•½λ©λ‹ˆλ‹€.

upgrade 의 μ΄μœ λŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

Socket.IOλŠ” μ‹€μ œλ‘œ WebSocket이 μž‘λ™ν•˜μ§€ μ•Šμ„ κ°€λŠ₯성이 λ†’κΈ° λ•Œλ¬Έμ— WebSocket이 μž‘λ™ν•  것이라고 κ°€μ •ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λŒ€μ‹  XHR λ˜λŠ” JSONP와 μ¦‰μ‹œ 연결을 μ„€μ •ν•œ λ‹€μŒ WebSocket으둜 μ—°κ²° μ—…κ·Έλ ˆμ΄λ“œλ₯Ό μ‹œλ„ν•©λ‹ˆλ‹€. μ‹œκ°„ μ΄ˆκ³Όμ— μ˜μ‘΄ν•˜λŠ” 폴백 방법과 비ꡐ할 λ•Œ μ΄λŠ” μ‚¬μš©μž 쀑 λˆ„κ΅¬λ„ κ²½ν—˜μ΄ μ €ν•˜λ˜μ§€ μ•ŠμŒμ„ μ˜λ―Έν•©λ‹ˆλ‹€.

http://socket.io/blog/introducing-socket-io-1-0/

@nkzawa
μ—…κ·Έλ ˆμ΄λ“œ μ ‘κ·Ό 방식이 μ„ ν˜Έλ˜λŠ” 이유λ₯Ό μ΄ν•΄ν•˜κ³  있으며 μ΄λŠ” 맀우 쒋은 κΈ°λŠ₯μž…λ‹ˆλ‹€.
κ·ΈλŸ¬λ‚˜ 항상 ν•„μš”ν•œ 것은 μ•„λ‹™λ‹ˆλ‹€. ν†΅μ œλœ μ—”ν„°ν”„λΌμ΄μ¦ˆ ν™˜κ²½μ—μ„œλŠ” λ‹€μš΄κ·Έλ ˆμ΄λ“œ μ ‘κ·Ό 방식이 더 합리적이며 μ›Ή μ†ŒμΌ“μ„ ν—ˆμš©λ˜λŠ” μœ μΌν•œ μ „μ†‘μœΌλ‘œ κ°•μ œν•˜λŠ” 것이 μ„±λŠ₯을 μ΅œμ ν™”ν•˜λŠ” κ°€μž₯ 쒋은 방법이라고 λ§ν•˜κ³  μ‹ΆμŠ΅λ‹ˆλ‹€.

이 μ˜΅μ…˜μ„ μ „λ‹¬ν•˜μ—¬ ν΄λΌμ΄μ–ΈνŠΈμ™€ μ„œλ²„ λͺ¨λ‘μ—μ„œ μ›Ή μ†ŒμΌ“μœΌλ‘œ κ°•μ œ 전솑을 μ‹œλ„ν–ˆμŠ΅λ‹ˆλ‹€.
{ transports: ["websocket"] }

이것은 μž‘λ™ν•˜λŠ” 것 κ°™κ³  μ„œλ²„μ— λŒ€ν•œ μ›Ή μ†ŒμΌ“ 연결은 ν•˜λ‚˜λ§Œ μžˆμ§€λ§Œ λͺ¨λ“  μ‹œλ„μ—μ„œ λΆ„λͺ…νžˆ μ‹€νŒ¨ν•˜λŠ” 폴링도 μˆ˜ν–‰λ˜κ³  μžˆμŒμ„ μ•Œμ•˜μŠ΅λ‹ˆλ‹€.
Request URL:http://localhost:4000/socket.io/?EIO=3&transport=polling&t=L8RaD0p
{ code: 0, message: "Transport unknown" }

ν˜„μž¬ 이 μ—…κ·Έλ ˆμ΄λ“œ μ ‘κ·Ό 방식을 λ‹€μš΄κ·Έλ ˆμ΄λ“œλ‘œ λ³€κ²½ν•  수 μžˆλŠ” μ‹€ν–‰ κ°€λŠ₯ν•œ μ†”λ£¨μ…˜μ΄ μžˆμŠ΅λ‹ˆκΉŒ?

μ‹ κ²½ 쓰지 λ§ˆμ„Έμš”. λ‚΄κ°€ socket.ioλ₯Ό μ‚¬μš©ν•œ λ‹€λ₯Έ ν΄λž˜μŠ€μ—μ„œ μΆ”κ°€ 폴링을 μˆ˜ν–‰ν•œ 것은 λ‚΄ μ½”λ“œμ˜€μŠ΅λ‹ˆλ‹€. λ”°λΌμ„œ μ—°κ²°ν•  λ•Œ μ›Ή μ†ŒμΌ“μœΌλ‘œμ˜ 전솑을 μ œν•œν•˜λŠ” optsλ₯Ό μ‚¬μš©ν•˜λ©΄ μ›ν•˜λŠ” λŒ€λ‘œ μˆ˜ν–‰λ©λ‹ˆλ‹€.

@sirudog
λ‹€μŒμ„ μ‹œλ„ν•  수 μžˆμŠ΅λ‹ˆλ‹€. { Transports: ['websocket', 'polling'] }

@poppowerlb2 μ—κ²Œ κ°μ‚¬λ“œλ¦½λ‹ˆλ‹€(λ‚΄ λ„€νŠΈμ›Œν¬ νƒ­μ—μ„œ 그와 같은 νŠΈλž˜ν”½μ΄ 더 이상 μ—†μŠ΅λ‹ˆλ‹€). λ‚΄ λΈŒλΌμš°μ €κ°€ μ΅œμ‹  버전이더라도 socket-io-clientκ°€ 폴링을 μ„ ν˜Έν•œλ‹€λŠ” 것을 μ•Œ 수 μžˆμŠ΅λ‹ˆλ‹€.

이 μ—…κ·Έλ ˆμ΄λ“œ μ ‘κ·Ό 방식은 일뢀 μ„œλ²„λ₯Ό μ œμ™Έν•˜μ§€ μ•ŠμŠ΅λ‹ˆκΉŒ? node-red μ„œλ²„μ—μ„œ socket.ioλ₯Ό μ‚¬μš©ν•˜λ €κ³  ν•˜λŠ”λ° 아직 연결을 μ„€μ •ν•  수 μ—†μŠ΅λ‹ˆλ‹€. λ¬Όλ‘  일반 μ›Ή μ†ŒμΌ“μ—μ„œλ„ 잘 μž‘λ™ν•©λ‹ˆλ‹€.

λ˜ν•œ 폴링이 μž‘λ™ν•˜μ§€ μ•Šλ”λΌλ„ socket.ioκ°€ μ›Ή μ†ŒμΌ“μ„ μ‹œλ„ν•˜λŠ” 것이 λ°”λžŒμ§ν•˜λ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€.

+1
λ‚˜λŠ” "μ—…κ·Έλ ˆμ΄λ“œ"보닀 "λ‹€μš΄κ·Έλ ˆμ΄λ“œ"λΌλŠ” κ°œλ…μ„ μ„ ν˜Έν•©λ‹ˆλ‹€. ν˜„μž¬ λŒ€λΆ€λΆ„μ˜ λΈŒλΌμš°μ €λŠ” μ›Ή μ†ŒμΌ“μ„ 잘 μ§€μ›ν•©λ‹ˆλ‹€. μ²˜μŒμ— μ›Ή μ†ŒμΌ“κ³Ό μ—°κ²°ν•˜λ©΄ μ„±λŠ₯이 ν–₯μƒλ˜κ³  λ¦¬μ†ŒμŠ€κ°€ μ ˆμ•½λ©λ‹ˆλ‹€.

`
const client = io('https://io.yourhost.com', { // κ²½κ³ : 이 경우 κΈ΄ 폴링 전솑에 λŒ€ν•œ 폴백이 μ—†μŠ΅λ‹ˆλ‹€. [ 'websocket' ] // λ˜λŠ” [ 'websocket', ' polling' ], 같은 것})

https://socket.io/docs/using-multiple-nodes/
`

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰