Socket.io: μ—…κ·Έλ ˆμ΄λ“œ ν›„ μ„€λͺ…λ˜μ§€ μ•Šμ€ μ—°κ²° ν•΄μ œ '전솑 μ’…λ£Œ'

에 λ§Œλ“  2012λ…„ 03μ›” 03일  Β·  73μ½”λ©˜νŠΈ  Β·  좜처: socketio/socket.io

였늘 package.json에 쒅속성을 μΆ”κ°€ν•œ ν›„ node_modulesλ₯Ό μ œκ±°ν•˜κ³  npm_install을 μ‹€ν–‰ν–ˆμŠ΅λ‹ˆλ‹€. λ‚˜λŠ” socket.io에 λŒ€ν•œ 버전 번호λ₯Ό μ§€μ •ν•˜μ§€ μ•Šμ•˜μœΌλ―€λ‘œ μ΅œμ‹  버전을 μ„ νƒν–ˆλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€.

λ‚΄κ°€ κ·Έ 일을 ν•œ ν›„ λ‚˜λŠ” κ·Έ μ•ˆμ— 그것을 μ•Œμ•„ μ°¨λ ΈμŠ΅λ‹ˆκΉŒ? μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ‹œμž‘ν•˜κ³  1λΆ„ 정도 μ§€λ‚˜λ©΄ μ†ŒμΌ“ 연결이 λŠμ–΄μ§€κ³  node.js μ½˜μ†” 좜λ ₯에 '전솑 μ’…λ£Œ' 정보 λ©”μ‹œμ§€κ°€ ν‘œμ‹œλ©λ‹ˆλ‹€. λ‚˜λŠ” μ›Ή μ†ŒμΌ“μ— λŒ€ν•΄μ„œλ§Œ socket.ioλ₯Ό μ„€μ •ν–ˆμŠ΅λ‹ˆλ‹€. μ €λŠ” Linux의 Chrome 13을 μ‚¬μš©ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

package.json에 λ“€μ–΄κ°€μ„œ 0.8.7둜 μ„€μ •ν•˜κ³  npm install을 λ‹€μ‹œ μ‹€ν–‰ν–ˆλŠ”λ° 이제 더 이상 μ—°κ²° ν•΄μ œκ°€ ν‘œμ‹œλ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

λ°”λΌκ±΄λŒ€ λ‚΄κ°€ 뭔가에 λŒ€ν•΄ ν˜Όλž€μŠ€λŸ¬μ›Œν•˜μ§€ μ•Šμ•˜κΈ°λ₯Ό λ°”λžλ‹ˆλ‹€. λ‚˜λŠ” λŒμ•„κ°€μ„œ 단계λ₯Ό λ°˜λ³΅ν–ˆκ³  λ™μΌν•œ κ²°κ³Όλ₯Ό μ–»μ—ˆμŠ΅λ‹ˆλ‹€. 더 ꡬ체적인 정보가 μ—†μ–΄ μ£„μ†‘ν•©λ‹ˆλ‹€.

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

0.9.1은 μ‘°κΈ° μ—°κ²° ν•΄μ œλ₯Ό μœ λ°œν•˜λŠ” ν•˜νŠΈλΉ„νŠΈμ™€ ν•¨κ»˜ 버그λ₯Ό λ„μž…ν–ˆμ„ 수 μžˆμŠ΅λ‹ˆλ‹€.
λ‚˜λŠ” 그것을 μ‘°μ‚¬ν•˜κ³  있으며 내일 0.9.2κ°€μžˆμ„ 수 μžˆμŠ΅λ‹ˆλ‹€.

κ°™κ²Œ. Mac의 Chrome 및 FF, λ™μΌν•œ μ‹œμŠ€ν…œμ˜ ν΄λΌμ΄μ–ΈνŠΈ 및 μ„œλ²„μ—μ„œ 반볡적인 μ—°κ²° λŠκΉ€/μž¬μ—°κ²°μ΄ ν‘œμ‹œλ©λ‹ˆλ‹€.
readme의 socket.io μ˜ˆμ œμ—μ„œ μ‰½κ²Œ λ³Ό 수 있으며 κΈ°λ³Έ 섀정은 κ·ΈλŒ€λ‘œ μœ μ§€λ©λ‹ˆλ‹€.

같은 λ¬Έμ œκ°€ μžˆμŠ΅λ‹ˆλ‹€ ... λ˜ν•œ μ†ŒμΌ“ 연결이 끊긴 직후 μƒˆ μ†ŒμΌ“μ΄ μΈμŠ€ν„΄μŠ€ν™”λ˜μ—ˆμŒμ„ μ•Œμ•˜μŠ΅λ‹ˆλ‹€.

λ‚˜λ₯Ό μœ„ν•œ ν•΄κ²° 방법은 μˆ˜λ™μœΌλ‘œ λ‹«κΈ° μ‹œκ°„ 초과λ₯Ό μ„€μ •ν•˜λŠ” κ²ƒμ΄μ—ˆμŠ΅λ‹ˆλ‹€.

io.configure( function() {
    io.set('close timeout', 60*60*24); // 24h time out
});

λ‚˜λ„μ΄ λ¬Έμ œκ°€ μžˆμ—ˆλ‹€. ν•΄κ²° 방법에 λŒ€ν•΄ steffenwtμ—κ²Œ κ°μ‚¬λ“œλ¦½λ‹ˆλ‹€.

λ„€ 저도 이런 였λ₯˜κ°€ μžˆμŠ΅λ‹ˆλ‹€. λ‚˜λŠ” λ©°μΉ  전에 socket.ioλ₯Ό 배우기 μ‹œμž‘ν–ˆκ³  μ²˜μŒμ—λŠ” λ‚΄κ°€ λ­”κ°€ 잘λͺ»ν•˜κ³  μžˆλ‹€κ³  μƒκ°ν–ˆμŠ΅λ‹ˆλ‹€.

0.9.0으둜 λ‹€μš΄κ·Έλ ˆμ΄λ“œν•˜λ©΄ μž‘λ™ν•©λ‹ˆλ‹€.

관련성이 μžˆλŠ”μ§€ ν™•μ‹€ν•˜μ§€ μ•Šμ§€λ§Œ μ†ŒμΌ“μ€ λ‹€λ₯Έ λͺ¨λ“  ν•˜νŠΈλΉ„νŠΈμ—μ„œ λ‹«νž™λ‹ˆλ‹€. κ·Έλž˜μ„œ μ΄λ ‡κ²Œ λ©λ‹ˆλ‹€

heartbeat2 gets sent and recieved all fine
heartbeat3 gets sens but never gets recieved
disconnect

여기에 둜그인:

   debug - emitting heartbeat for client 18615332192056708826
   debug - websocket writing 2::
   debug - set heartbeat timeout for client 18615332192056708826
   info  - transport end
   debug - set close timeout for client 18615332192056708826
   debug - cleared close timeout for client 18615332192056708826
   debug - cleared heartbeat timeout for client 18615332192056708826
   debug - discarding transport

λ‚˜λ„ λ¬Έμ œκ°€ μžˆλ‹€.

0.91-1 을 μ‚¬μš©ν•©λ‹ˆλ‹€.

λ‚˜λŠ” 그것을 μ‹œλ„ν•˜μ§€λ§Œμ΄ λ¬Έμ œκ°€ μžˆμŠ΅λ‹ˆλ‹€.

io.configure( ν•¨μˆ˜() {
io.set('λ‹«κΈ° μ‹œκ°„ 초과', 60_60_24); // 24μ‹œκ°„ νƒ€μž„μ•„μ›ƒ
});

여기에 같은 문제

0.9.0으둜 λ‹€μš΄κ·Έλ ˆμ΄λ“œν•˜μ…¨λ‚˜μš”? 이제 NPMμ—μ„œ μ΅œμ‹ μœΌλ‘œ ν‘œμ‹œν–ˆμŠ΅λ‹ˆλ‹€.

0.9.1-1에 λŒ€ν•œ λ™μΌν•œ λ¬Έμ œκ°€ 0.9.0으둜 λ‹€μš΄κ·Έλ ˆμ΄λ“œλ˜μ—ˆμœΌλ©° λ¬Έμ œκ°€ μ‚¬λΌμ‘ŒμŠ΅λ‹ˆλ‹€.

ν•΄κ²° λ°©λ²•μœΌλ‘œ ν΄λΌμ΄μ–ΈνŠΈμ—μ„œ 일뢀 μ—°κ²° μœ μ§€(예: 20초)λ₯Ό 보내고 μ„œλ²„μ—μ„œ μ¦‰μ‹œ 응닡할 수 μžˆμŠ΅λ‹ˆλ‹€.

ν΄λΌμ΄μ–ΈνŠΈ: setInterval(function() { socket.emit("μ—°κ²° μœ μ§€", null) },20*1000);
μ„œλ²„: socket.on('μ—°κ²° μœ μ§€', ν•¨μˆ˜(데이터) { socket.emit('μ—°κ²° μœ μ§€', null); });

FWIW: λ‹€λ₯Έ μ„œλ²„μ—μ„œ ν΄λΌμ΄μ–ΈνŠΈμ— μ„œλΉ„μŠ€λ₯Ό μ œκ³΅ν•˜κ³  있고 ν΄λΌμ΄μ–ΈνŠΈ μ½”λ“œ κ°€ 0.9.0으둜 λ‹€μš΄κ·Έλ ˆμ΄λ“œλ˜μ§€ μ•Šμ€ 경우 μ—¬μ „νžˆ λ¬Έμ œκ°€ ν‘œμ‹œλ©λ‹ˆλ‹€.

'socket.io'λ₯Ό 0.9.0으둜 λ‹€μš΄κ·Έλ ˆμ΄λ“œν–ˆλŠ”λ° μ—¬μ „νžˆ λ¬Έμ œκ°€ μžˆμŠ΅λ‹ˆλ‹€. 그런 λ‹€μŒ socket.io-clientλ₯Ό 0.9.0으둜 λ‹€μš΄κ·Έλ ˆμ΄λ“œν–ˆλŠ”λ° 연결이 λŠκΈ°μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

λ˜ν•œ λ‚΄κ°€ μ‹œλ„ν•œ 전솑 μ‹€νŒ¨λŠ” μ›Ή μ†ŒμΌ“κ³Ό xhr-pollingμž…λ‹ˆλ‹€.

이 λ¬Έμ œλŠ” λ‹«μ•„μ•Ό ν•©λ‹ˆλ‹€. 맞죠?

λ‚˜λŠ” 같은 문제λ₯Ό κ°€μ§€κ³ μžˆλ‹€. κ·ΈλŸ¬λ‚˜ λ‚˜λŠ” 그것이 λ‚΄κ°€ haproxyλ₯Ό 가지고 있기 λ•Œλ¬Έμ΄λΌλŠ” 것을 μ•Œμ•˜μŠ΅λ‹ˆλ‹€.

λ‚΄ λ¬Έμ œλŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

frontend all 0.0.0.0:80
    default_backend www_backend
    acl is_websocket path_beg /socket.io
    acl is_websocket hdr(Upgrade) -i WebSocket
    acl is_websocket hdr_beg(Host) -i ws
    timeout client 1000

"timeout client 1000" 쀄에 μžˆμŠ΅λ‹ˆλ‹€(λ¬Έμ œμΈμ§€ ν™•μΈν•˜κΈ° μœ„ν•΄ 1초둜 λ³€κ²½ν–ˆλŠ”λ°...).

이제 μ›Ή μ†ŒμΌ“ λ°±μ—”λ“œμ— λŒ€ν•΄μ„œλ§Œ λ³€κ²½ν•  수 μžˆλŠ” 방법이 μžˆλŠ”μ§€ μ°Ύκ³  μžˆμŠ΅λ‹ˆλ‹€.

λ‚˜λŠ” 이것이 λˆ„κ΅°κ°€λ₯Ό 돕기λ₯Ό λ°”λžλ‹ˆλ‹€ :+1:

참고둜, xhr-polling 및 0.9.14μ—μ„œλ„ 이 λ¬Έμ œκ°€ 계속 λ°œμƒν•©λ‹ˆλ‹€. 25μ΄ˆλ§ˆλ‹€ κ°•μ œ μ—°κ²° ν•΄μ œκ°€ μžˆμŠ΅λ‹ˆλ‹€. λ‘œκ·ΈλŠ” μœ„μ™€ λ™μΌν•©λ‹ˆλ‹€.

0.9.14 μ„œλ²„ 및 0.9 ν΄λΌμ΄μ–ΈνŠΈμ—μ„œλ„ μ΄λŸ¬ν•œ ν˜„μƒμ΄ λ°œμƒν•˜λŠ”μ§€ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€. 25μ΄ˆλ§ˆλ‹€ 연결이 λŠμ–΄μ§€μ§€λŠ” μ•Šμ§€λ§Œ κ°„ν—μ μœΌλ‘œ 연결이 λŠμ–΄μ§‘λ‹ˆλ‹€. λ‚˜λŠ” 그것을 호좜 stream.emit('end'); node.js의 _stream_readable.js에 μžˆμŠ΅λ‹ˆλ‹€. λ²„νΌμ—μ„œ EOFλ₯Ό 읽은 결과라고 μƒκ°ν•©λ‹ˆλ‹€.

@citosid μ™œ haproxy ν΄λΌμ΄μ–ΈνŠΈ μ‹œκ°„ 초과둜 인해 μ΄λŸ¬ν•œ λ¬Έμ œκ°€ λ°œμƒν•©λ‹ˆκΉŒ?

0.9.16μ—μ„œ λ°œμƒν•©λ‹ˆλ‹€. BoarK와 동일

socket.io 지원이 쀑단 λ˜μ—ˆμŠ΅λ‹ˆκΉŒ?

@jofaron μ£½κΈ° 전에 지원이 μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€. μ•„λ‹ˆμš”, Socket.IO 지원은 죽은 것이 μ•„λ‹ˆλΌ μ‘΄μž¬ν•˜μ§€ μ•Šμ•˜μ„ λΏμž…λ‹ˆλ‹€.

Socket.io 0.9.16κ³Ό λ™μΌν•œ 문제 - ~25μ΄ˆλ§ˆλ‹€ 연결이 λŠμ–΄μ§€κ³  "전솑 폐기"κ°€ λ™μ‹œμ— ν‘œμ‹œλ˜λŠ” λ‘œκ·Έκ°€ ν‘œμ‹œλ©λ‹ˆλ‹€.

0.8.6으둜 λ‹€μš΄ κ·Έλ ˆμ΄λ“œν•˜λ©΄ 기본적으둜 λͺ¨λ“  것이 κ³ μ •λ˜μ–΄ .. μ‚¬μš©ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.
websocket에 λŒ€ν•œ λ°±μ—…μœΌλ‘œ xhr-polling λŒ€μ‹  jsonp-polling .. 멀리 λ³΄μž…λ‹ˆλ‹€.
더 μ•ˆμ •μ μž…λ‹ˆλ‹€.

2014λ…„ 1μ›” 26일 μΌμš”μΌ μ˜€μ „ 10μ‹œ 16뢄에 Aran Reeks [email protected]이 λ‹€μŒκ³Ό 같이 μž‘μ„±ν–ˆμŠ΅λ‹ˆλ‹€.

Socket.io 0.9.16κ³Ό λ™μΌν•œ 문제 - ~25λ§ˆλ‹€ 연결이 λŠμ–΄μ§
초 및 "전솑 폐기"λ₯Ό ν‘œμ‹œν•˜λŠ” λ‘œκ·Έκ°€ λ™μ‹œμ— ν‘œμ‹œλ©λ‹ˆλ‹€.

β€”
이 이메일에 직접 λ‹΅μž₯ν•˜κ±°λ‚˜ Gi tHubhttps://github.com/LearnBoost/socket.io/issues/777#issuecomment -33325205μ—μ„œ ν™•μΈν•˜μ„Έμš”.
.

μ•ˆλ…•ν•˜μ„Έμš” @joefaron , 도움을

였늘 저녁에 λ‹€λ₯Έ ꡬ성 μ˜΅μ…˜μ„ μ‚¬μš©ν•˜μ—¬ 쑰금 λ†€μ•˜κ³  내일 더 μžμ„Ένžˆ μ‚΄νŽ΄λ³΄κ² μŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ λ¬Έμ œλŠ” ν•˜νŠΈλΉ„νŠΈ 검사가 μ‹€νŒ¨ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. μ΄λŸ¬ν•œ κ²€μ‚¬λŠ” μ‚¬μš©μžμ— λŒ€ν•œ 연결이 μ—¬μ „νžˆ ν•„μš”ν•˜κ³  μ–΄λ–€ μ΄μœ λ‘œλ“  μ—°κ²° ν•΄μ œλ₯Ό μ „μ†‘ν•˜μ§€ μ•Šκ³  λ– λ‚˜μ§€ μ•Šμ•˜λŠ”μ§€ ν™•μΈν•˜κΈ° μœ„ν•œ κ²ƒμž…λ‹ˆλ‹€.

Firefox와 ν˜„μž¬ μ•ˆμ •μ μΈ Chrome λΉŒλ“œ(32.0.1700.76m) λͺ¨λ‘μ—μ„œ 이 버그λ₯Ό λ³΅μ œν•  수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€.

μ²˜μŒμ—λŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ— λŒ€ν•΄ ν•˜νŠΈλΉ„νŠΈλ₯Ό μ™„μ „νžˆ λΉ„ν™œμ„±ν™”ν•˜λ €κ³  μ‹œλ„ν–ˆμ§€λ§Œ μ‹€μ œλ‘œλŠ” ν•„μš”ν•˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€. 이것은 λ‹€μŒκ³Ό 같이 μˆ˜ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€(ν˜„μž¬ λ¬Έμ„œμ— λ”°λ₯΄λ©΄ 이 μž‘μ—…μ„ μ‹œλ„ν–ˆμ„ λ•Œ λͺ¨λ“  전솑 방법을 μ œκ±°ν•˜λŠ” κ²ƒμ²˜λŸΌ λ³΄μ˜€κ³  μ§€μ†μ μœΌλ‘œ 좩돌 및 λ‹€μ‹œ μ‹œμž‘).
io.set('heartbeats', false);

이것이 μ‹€νŒ¨ν•¨μ— 따라 λ‹€μŒ μ‹œλ„λŠ” app.js λ‚΄μ—μ„œ λ‹€μŒμ„ μ‚¬μš©ν•˜μ—¬ μˆ˜ν–‰ν•  수 μžˆλŠ” ν•˜νŠΈλΉ„νŠΈ μš”μ²­ μ‚¬μ΄μ˜ μ‹œκ°„ 초과λ₯Ό λŠ˜λ¦¬λŠ” κ²ƒμ΄μ—ˆμŠ΅λ‹ˆλ‹€.
io.set('heartbeat timeout', 99999); // 99999 being the time between requests in seconds - Default is 25, please choose your value as applicable for your applications

이것은 μš°λ¦¬κ°€ ν΄λΌμ΄μ–ΈνŠΈ μ—°κ²° λŠκΈ°μ— μ‹ κ²½ 쓰지 μ•ŠκΈ° λ•Œλ¬Έμ— 우리 μ‘μš© ν”„λ‘œκ·Έλž¨μ— νš¨κ³Όκ°€ μžˆμ—ˆμ§€λ§Œ κ·€ν•˜μ˜ ν™˜κ²½μ—μ„œλŠ” μ‹€ν–‰ κ°€λŠ₯ν•œ μ˜΅μ…˜μ΄ 아닐 수 μžˆμŠ΅λ‹ˆλ‹€.

도움이 λ˜λŠ” 경우 이 λ¬Έμ œκ°€ μžˆλŠ” λ‹€λ₯Έ μ‚¬λžŒμ˜ 경우 λ‚΄ ν™˜κ²½μ€ λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.
NodeJS: v0.10.24 Socket.io: v0.9.16 Centos 6.5

이것은 정말 μ‹œκΈ‰ν•œ/μ€‘μš”ν•œ 문제라고 μƒκ°ν•©λ‹ˆλ‹€. μ™œ 아직 ν•΄κ²°λ˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆκΉŒ? 이 문제 μŠ€λ ˆλ“œκ°€ μ‹œμž‘λœ ν›„ 2년이 μ§€λ‚¬μŠ΅λ‹ˆλ‹€.

저도 이 문제λ₯Ό κ²ͺκ³  μžˆμŠ΅λ‹ˆλ‹€:

NodeJS: v0.10.24
Socket.io: v0.9.16

d-oliveros: 0.8.6으둜 λ‹€μš΄κ·Έλ ˆμ΄λ“œν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€. λ‚˜λŠ” 이것을 가지고 μžˆμ§€ μ•Šμ•˜λ‹€
문제.. 그리고 λ‚˜λŠ” μ΅œμ‹  λΉŒλ“œκ°€ κ°€κΉŒμš΄ μž₯λž˜μ— μˆ˜μ •λ  것이라고 μƒκ°ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

2014λ…„ 2μ›” 15일 ν† μš”μΌ μ˜€ν›„ 8μ‹œ 55λΆ„, d-oliveros [email protected]μž‘μ„± :

이것은 정말 μ‹œκΈ‰ν•œ/μ€‘μš”ν•œ 문제라고 μƒκ°ν•©λ‹ˆλ‹€. μ™œ μ•ˆλμ–΄
아직 ν•΄κ²°? 이 문제 μŠ€λ ˆλ“œκ°€ μ‹œμž‘λœ 지 2년이 μ§€λ‚¬μŠ΅λ‹ˆλ‹€.

저도 이 문제λ₯Ό κ²ͺκ³  μžˆμŠ΅λ‹ˆλ‹€:

λ…Έλ“œJS: v0.10.24
μ†ŒμΌ“.io: v0.9.16

이 이메일에 직접 λ‹΅μž₯ν•˜κ±°λ‚˜ Gi tHubhttps://github.com/LearnBoost/socket.io/issues/777#issuecomment -35177466μ—μ„œ ν™•μΈν•˜μ„Έμš”.
.

μƒˆλ‘œμš΄ master μ‚¬μš©ν•΄ λ³΄μ‹­μ‹œμ˜€. 이 λ¬Έμ œλŠ” ν•΄κ²°λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

이 λ¬Έμ œμ— λŒ€ν•œ μˆ˜μ • 사항이 ν¬ν•¨λœ 0.9.17 λ¦΄λ¦¬μŠ€κ°€ μžˆμŠ΅λ‹ˆκΉŒ?

@fgnass 1.0.0-pre μž¬ν˜„ν•  수 μžˆμŠ΅λ‹ˆκΉŒ?

@guille μ§€κΈˆκΉŒμ§€ 잘

μ•ˆλ…•ν•˜μ„Έμš” @guille 이 μˆ˜μ • 사항을 0.9.16에 λ„μž…ν•  수 μžˆλŠ” 방법이 μžˆμŠ΅λ‹ˆκΉŒ? μš°λ¦¬κ°€ 잘 ν™•λ¦½λœ ν”„λ‘œλ•μ…˜ ν™˜κ²½μ—μ„œ node.js / socket.ioλ₯Ό μ‚¬μš©ν•œλ‹€λŠ” κ²ƒλ§ŒμœΌλ‘œ 우리 ν”Œλž«νΌμ˜ λͺ¨λ“  츑면의 μ‹œν—˜νŒ 버전을 μ‚¬μš©ν•˜λŠ” 것을 μ •λ‹Ήν™”ν•˜λŠ” 데 어렀움을 κ²ͺ을 κ²ƒμž…λ‹ˆλ‹€. 0.9.16에 λŒ€ν•œ νŒ¨μΉ˜κ°€ μˆ˜ν–‰λ  수 μžˆκ±°λ‚˜ 1.0.0이 (맀우) κ°€κΉŒμš΄ μž₯λž˜μ— 릴리슀될 μ˜ˆμ •μ΄λΌλ©΄ 이것이 훨씬 λ°”λžŒμ§ν•  κ²ƒμž…λ‹ˆλ‹€.

@eggysplat의 경우 +1

@aran112000 heartbeat timeout ν•΄κ²° 방법에 κ°μ‚¬λ“œλ¦½λ‹ˆλ‹€. v0.9.16μ—μ„œ μž‘λ™ν•©λ‹ˆλ‹€.

사싀 λ‚˜λŠ” 내가이 λ¬Έμ œκ°€ λ°œμƒν•œ 이유λ₯Ό μ°Ύμ•˜μŠ΅λ‹ˆλ‹€. 정말 λΆ€λ„λŸ½κ²Œλ„ v0.9.16을 μ‚¬μš©ν•˜κ³  μžˆλŠ” 쀄 μ•Œμ•˜μŠ΅λ‹ˆλ‹€. μ‹€μ œλ‘œλŠ” κ·Έ 버그가 μžˆλŠ” v0.9.0을 μ‚¬μš©ν•˜κ³  μžˆμ—ˆμŠ΅λ‹ˆλ‹€. v0.9.2μ—μ„œ μˆ˜μ •λ˜μ—ˆμŠ΅λ‹ˆλ‹€. https://github.com/LearnBoost/socket.io/commit/57a0b2406004e46ec34729392ee289191a4f78e7 및 https://github.com/LearnBoost/socket.io/commit/df5f26ec34729392ee289191a4f78e7 및

v0.9.0μ—μ„œμ™€ 같이 heartbeat timeout 보닀 큰 heartbeat interval κ°€ μ—†λŠ”μ§€ ν™•μΈν•˜μ‹­μ‹œμ˜€.

λ‹€λ₯Έ μ‚¬λžŒλ“€μ΄ μ•Œ 수 μžˆλ„λ‘ κ²Œμ‹œλ¬Ό νŽΈμ§‘:

λ‚΄ Macμ—μ„œ 문제λ₯Ό ν…ŒμŠ€νŠΈν•˜κΈ°λ‘œ κ²°μ •ν•  λ•ŒκΉŒμ§€ 버그 좔적에 λͺ‡ μ‹œκ°„μ„ λ‚­λΉ„ν–ˆμŠ΅λ‹ˆλ‹€. Windows 8의 λ°”μ΄λŸ¬μŠ€ 백신도 연결을 μ°¨λ‹¨ν•˜κ³  문제λ₯Ό μΌμœΌν‚€λŠ” 것 κ°™μŠ΅λ‹ˆλ‹€. μ œκ±°ν•œ ν›„ λͺ¨λ“  것이 잘 μž‘λ™ν•©λ‹ˆλ‹€.

κ΄€λ ¨ κ²Œμ‹œλ¬Όμ€ μ‹€μ œλ‘œ 여기에 μžˆμ§€λ§Œ μ°ΎκΈ°κ°€ 맀우 μ–΄λ ΅μŠ΅λ‹ˆλ‹€.
https://github.com/LearnBoost/socket.io/wiki/Socket.IO-and-firewall-software

μ €λŠ” socket.io의 초보자이며 이틀 이상 κ±Έλ ΈμŠ΅λ‹ˆλ‹€. 데이터 μ†‘μˆ˜μ‹  ν›„ ν΄λΌμ΄μ–ΈνŠΈλŠ” 연결을 λŠμ—ˆλ‹€κ°€ λ‹€μ‹œ μ—°κ²°ν•˜μ—¬ socket.id 값이 λ³€κ²½λ©λ‹ˆλ‹€.

socket.io:client client close with reason transport close +39s
socket.io:socket closing socket - reason transport close +44s
.
.
.
socket.io:namespace adding socket to nsp / +4.1m
socket.io:socket socket connected - writing packet +1s

λ§ˆμ§€λ§‰μœΌλ‘œ, λ‚˜λŠ” socket.ioκ°€ μ‹œμŠ€ν…œμ—μ„œ μžλ™μœΌλ‘œ 연결을 λŠμ—ˆλ‹€κ°€ λ‹€μ‹œ μ—°κ²°ν•˜λ„λ‘ 콜백 내뢀에 μ˜ˆμ™Έκ°€ μžˆλ‹€λŠ” 것을 λ°œκ²¬ν–ˆμŠ΅λ‹ˆλ‹€.

socket.on('someEvent', function(){
    var a = null;
    a.b; //You won't be aware of this error, this error is suppressed and won't be shown on console. 
         //Moreover, it disconnects and reconnects
})

이 λŒ“κΈ€ 도 μ°Έμ‘°

λ”°λΌμ„œ μžλ™μœΌλ‘œ 였λ₯˜λ₯Ό ν¬μ°©ν•˜κ³  μ½˜μ†”μ— 아무 것도 ν‘œμ‹œν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ‚˜μ—κ²Œ μ•Œλ¦¬μ§€ μ•Šκ³  였λ₯˜λ₯Ό μ–΅μ œν•˜κ³  연결을 λŠκ±°λ‚˜ λ‹€μ‹œ μ—°κ²°ν•˜λŠ” μ΄μœ λŠ” λ¬΄μ—‡μž…λ‹ˆκΉŒ?

1.3.5 였λ₯˜κ°€ μ—¬μ „νžˆ μžˆμŠ΅λ‹ˆλ‹€.

κ·Έλ ‡μŠ΅λ‹ˆκΉŒ?

예, λ¬Έμ œλŠ” μ—¬μ „νžˆ 1.3.5에 μ‘΄μž¬ν•©λ‹ˆλ‹€...

λ¬Έμ œκ°€ μ—¬μ „νžˆ 쑴재

예, λ¬Έμ œκ°€ 1.3.5μ—μ„œ μ—¬μ „νžˆ λ°œμƒν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. μˆ˜μ •ν•˜μ‹­μ‹œμ˜€.

@citosid κ°€ μ§€μ ν–ˆλ“―μ΄

같은 λ¬Έμ œκ°€ μžˆμ§€λ§Œ haproxyλ₯Ό μ‚¬μš©ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 이것이 μž‘λ™ν–ˆλ˜ λ§ˆμ§€λ§‰ 버전을 μ•„λŠ” μ‚¬λžŒμ΄ μžˆμŠ΅λ‹ˆκΉŒ?

λ„€, 저희 μ‹œμŠ€ν…œμ—μ„œ λ¬Έμ œκ°€ 100% ν•΄κ²°λ˜μ§€ μ•Šμ•˜λ‹€λŠ” 보고도 λ°›κ³  μžˆμŠ΅λ‹ˆλ‹€. μž¬λ―ΈμžˆλŠ” 점은 haproxyμ—μ„œ "timeout client 1"을 1초둜 μ„€μ •ν•˜μ—¬ 문제λ₯Ό μ•ˆμ •μ μœΌλ‘œ μž¬ν˜„ν•  수 μžˆμ—ˆκ³  우리 ν”„λ‘ νŠΈμ—”λ“œμ—μ„œ 버그λ₯Ό κ²½ν—˜ν•  수 μžˆλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€.

이에 따라 λ‚˜λŠ” "μ‹œκ°„ 초과 ν΄λΌμ΄μ–ΈνŠΈ"λ₯Ό 더 큰 숫자둜 늘렸고 socket.io keepalive / heartbeatκ°€ 연결을 μƒˆλ‘œ κ³ μΉ  수 μžˆλŠ” μΆ©λΆ„ν•œ μ‹œκ°„μ„ κ°–κΈ° λ•Œλ¬Έμ— λ¬Έμ œκ°€ μ‚¬λΌμ§ˆ 것이라고 μƒκ°ν–ˆμŠ΅λ‹ˆλ‹€. 이 가정은 μ•„λ§ˆλ„ 틀릴 κ°€λŠ₯성이 λ†’μœΌλ©°, μΆ”κ°€ 정보λ₯Ό μ•Œκ²Œ 되면 계속 μ•Œλ € λ“œλ¦¬κ² μŠ΅λ‹ˆλ‹€.

λ‚˜λŠ” 이것을 stackoverflow ν¬μŠ€νŠΈμ— 올렸고 μ—¬λŸ¬λΆ„ 쀑 μΌλΆ€λŠ” 이것을 ν•΄κ²°ν•  수 μžˆμŠ΅λ‹ˆλ‹€:
"HackTimer.js와 ccapture.jsλŠ” λͺ¨λ‘ window.setTimeout을 μ‚¬μš©μž μ •μ˜ ν•¨μˆ˜λ‘œ λŒ€μ²΄ν•˜λŠ” 것 κ°™μŠ΅λ‹ˆλ‹€. HackTimer.jsλŠ” λ‹€λ₯Έ JavaScript보닀 λ¨Όμ € μ‹€ν–‰λ˜λ©΄ μ •μƒμ μœΌλ‘œ μž‘λ™ν•˜λŠ” 것 κ°™μŠ΅λ‹ˆλ‹€. ccapture.js의 경우 첫 번째 슀크립트둜 μ‹€ν–‰ν•˜μ‹­μ‹œμ˜€. λ”°λΌμ„œ SocketIOλŠ” λ¨Όμ € λΈŒλΌμš°μ €μ˜ κΈ°λ³Έ setTimeout을 μ‚¬μš©ν•œ λ‹€μŒ ν˜„μž¬ μ‹€ν–‰ 쀑인 타이머λ₯Ό μ€‘λ‹¨μ‹œν‚€λŠ” μ‚¬μš©μž 지정 setTimeout에 μ˜ν•΄ λ‚ μ•„κ°‘λ‹ˆλ‹€."

μ½”λ“œλ₯Ό κ²€μƒ‰ν•˜μ—¬ 라이브러리 쀑 ν•˜λ‚˜κ°€ 이λ₯Ό λŒ€μ²΄ν•˜λŠ”μ§€ ν™•μΈν•©λ‹ˆλ‹€.

ag 'window.setTimeout\s*='

λ˜ν•œ μ½˜μ†”μ—μ„œ ν…ŒμŠ€νŠΈν•˜μ—¬ setTimeout이 μˆ˜μ •λ˜μ—ˆλŠ”μ§€ 확인할 μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

/native/.test(window.setTimeout) // returns true for the native function and false for a custom one

이 버그가 계속 μ’…λ£Œλ˜λ‚˜μš”? λ§ˆμŠ€ν„° λ²„μ „μœΌλ‘œ μ—…κ·Έλ ˆμ΄λ“œν–ˆλŠ”λ° Transport λ‹«κΈ° μ•Œλ¦Όκ³Ό ν•¨κ»˜ μ•½ 2λΆ„ λ§Œμ— λͺ¨λ“  λͺ¨λ°”일 μž₯치 연결이 λŠμ–΄μ‘ŒμŠ΅λ‹ˆλ‹€..

이것이 socket.io 1 > μ—μ„œ λ©€μ–΄μ§€κ²Œ ν•˜κ³  λ‚˜λ₯Ό socket.io 0.9.17 에 머물게 ν•œ κ²ƒμž…λ‹ˆλ‹€. ν•˜μ§€λ§Œ 이제 λ‹€μ‹œ μ‹œλ„ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. μ„œλ²„μ—μ„œ 핑퐁을 μˆ˜λ™μœΌλ‘œ μ„€μ •ν•˜μ—¬ 계속 μœ μ§€ν•˜κ³  19λΆ„ 후에 연결을 λŠμŠ΅λ‹ˆλ‹€. 간격은 35μ΄ˆλ§ˆλ‹€ ..

socket.io 0.9.17을 μ‹€ν–‰ν•˜λ©΄ 이 λ¬Έμ œκ°€ μ—†μŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ 더 이상 μ‚¬μš©λ˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— 더 이상 μ‚¬μš©ν•˜κ³  싢지 μ•ŠμŠ΅λ‹ˆλ‹€. 도움이 ν•„μš”ν•˜λ©΄ λͺ¨λ°”일 μž₯치의 λΈŒλΌμš°μ €μ—μ„œ λ°œμƒν•©λ‹ˆλ‹€.

@utan μž¬μƒμ‚° λ‹¨κ³„λŠ” λ¬΄μ—‡μž…λ‹ˆκΉŒ?

μ•ˆλ…•ν•˜μ„Έμš” @rauchg μž…λ‹ˆλ‹€ .

λ‹΅μž₯을 보내 μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€..

1) socket.io 1.4.0 μ„€μΉ˜
2) nginx ꡬ성을 ν”„λ‘μ‹œλ‘œ μ„€μ •

                        proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection "upgrade";
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header Host $host;
                proxy_http_version 1.1;
                proxy_pass http://io_nodes;

3) socket.io 1.4.0 / 2015-11-28을 μ‚¬μš©ν•˜μ—¬ ν΄λΌμ΄μ–ΈνŠΈ μ„€μ •
4) λͺ¨λ°”일 κΈ°κΈ°μ—μ„œ 접속..
5) 앱에 μ—°κ²°λœ λͺ¨λ°”일 λΈŒλΌμš°μ €λ₯Ό κ·ΈλŒ€λ‘œ 두고 νœ΄λŒ€μ „ν™”λ₯Ό 유휴 μƒνƒœλ‘œ λ‘‘λ‹ˆλ‹€.

그런 λ‹€μŒ 둜그 ;

  engine:polling compressing +0ms
  engine:socket executing batch send callback +1ms
PuTTY  engine intercepting request for path "/socket.io/" +95ms
  engine handling "GET" http request "/socket.io/?EIO=3&transport=polling&t=L8YVUt6&sid=DJNvvkhmCQew_3vGAAAB" +0ms
  engine setting new request for existing client +0ms
  engine:polling setting request +0ms
  engine:socket transport error +6s
  engine:polling closing +2ms
  engine:polling transport writable - closing right away +0ms
  engine:polling writing "Γ―ΒΏΒ½1" +0ms
  socket.io:client client close with reason transport error +0ms
  socket.io:socket closing socket - reason transport error +0ms

34λΆ„ ν›„ 접속이 λŠκΉλ‹ˆλ‹€..

폴링을 μ‚¬μš©ν•˜λŠ” 경우 이 였λ₯˜ λ‘œκ·Έκ°€ ν‘œμ‹œλ©λ‹ˆλ‹€.

 engine:socket executing batch send callback +1ms
PuTTY  engine intercepting request for path "/socket.io/" +106ms
  engine handling "GET" http request "/socket.io/?EIO=3&transport=polling&t=L8YXgi6&sid=skadf3It4qBRi0S0AAAC" +1ms
  engine setting new request for existing client +0ms
  engine:polling setting request +0ms
  engine:socket transport error +3s
  engine:polling closing +0ms
  engine:polling transport writable - closing right away +0ms
  engine:polling writing "Γ―ΒΏΒ½1" +0ms
  socket.io:client client close with reason transport error +1ms
  socket.io:socket closing socket - reason transport error +2ms
  engine intercepting request for path "/socket.io/" +373ms
  engine handling "POST" http request "/socket.io/?EIO=3&transport=polling&t=L8YXhdB&sid=skadf3It4qBRi0S0AAAC" +0ms

κ·Έλž˜μ„œ @rauchgκ°€ λ‹«μ•˜μŠ΅λ‹ˆκΉŒ?

μ •λ§λ‘œ λ‹Ήμ‹ μ΄ν•΄μ•Όν•œλ‹€κ³  μƒκ°ν•˜μ§€ λ§ˆμ‹­μ‹œμ˜€.

λ‚˜λŠ”ν•˜μ§€ μ•Šμ•˜λ‹€.

@rauchg ,
이것이 이제 socket.io의 정상적인 λ™μž‘μž…λ‹ˆκΉŒ? ν”ŒλŸ¬κ·ΈμΈμ΄ μ—†κ³  유휴 μƒνƒœμΈ 경우 λͺ¨λ°”일 μž₯μΉ˜μ—μ„œ μ‚¬μš©μžμ˜ 연결을 λŠλŠ” WS ν”„λ‘œν† μ½œμ΄ λ³€κ²½λ˜μ—ˆμŠ΅λ‹ˆκΉŒ?

이 문제둜 벽에 머리λ₯Ό λ°•κ³  μžˆμŠ΅λ‹ˆλ‹€. μ—…κ·Έλ ˆμ΄λ“œλ₯Ό μ™„λ£Œν•  수 μ—†μŠ΅λ‹ˆλ‹€. 그리고 μƒˆ socket.io둜 λ‚΄ μ½”λ“œλ₯Ό λ¦¬νŒ©ν„°λ§ν•©λ‹ˆλ‹€...
λ‚΄ μ„œλ²„ μš°λΆ„νˆ¬ 10.10
Nginx 버전: Nginx/1.8.0
Node v0.10.31 // 4.0으둜 μ—…κ·Έλ ˆμ΄λ“œν•΄λ„ λ˜‘κ°™μŠ΅λ‹ˆλ‹€..

https 및 Nginx 프둝싱 socket.io μ‚¬μš©..

λ‹€λ₯Έ μ‚¬λžŒμ΄ 같은 문제λ₯Ό κ²ͺκ³  μžˆμŠ΅λ‹ˆκΉŒ μ•„λ‹ˆλ©΄ μ €λ§Œ μžˆμŠ΅λ‹ˆκΉŒ?

λ‚˜λ„ κ·ΈλŸ΄μ§€λ„ λͺ¨λ₯Έλ‹€κ³  μƒκ°ν•œλ‹€.. κ·Έλž˜λ„ λ‚΄ 경우λ₯Ό μ •ν™•νžˆ μ§€μ ν•˜κΈ°λŠ” μ–΄λ ΅λ‹€. λ‚˜λŠ” socket.io와 ν•¨κ»˜ sail.jsλ₯Ό μ‚¬μš©ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

μš°λΆ„νˆ¬ 14.04
λ…Έλ“œ v5.3.0
npm v 3.3.12
돛. [email protected]
socket.io@~1.4.3

λ‚΄ ν΄λΌμ΄μ–ΈνŠΈλŠ” socket.io-client와 sails.io.jsκ°€ ν˜Όν•©λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.

var socketIOClient = require('socket.io-client');
var sailsIOClient = require('sails.io.js');
var io = sailsIOClient(socketIOClient);
io.socket.on('connect', function(data){....})

λ”°λΌμ„œ 초기 연결은 μ˜μ›νžˆ μ§€μ†λ˜μ§€λ§Œ 이 ν΄λΌμ΄μ–ΈνŠΈμ— λŒ€ν•œ .emit() λ˜λŠ” .broadcast() 후에 μ„œλ²„λŠ” ~25μ΄ˆμ—μ„œ 1λΆ„ 후에 ν΄λΌμ΄μ–ΈνŠΈλ₯Ό λ€ν”„ν•˜κ³  ν΄λΌμ΄μ–ΈνŠΈλŠ” μ—°κ²° λŠκΉ€ μ•Œλ¦Όμ„ 받지 μ•ŠμŠ΅λ‹ˆλ‹€ . 아직 μ—°κ²°λ˜μ–΄ μžˆλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€.

맀우 μ‹€λ§μŠ€λŸ½μŠ΅λ‹ˆλ‹€.

λΉ„μŠ·ν•œ λ¬Έμ œκ°€ μžˆμ§€λ§Œ λ³΄μ•ˆ μ†ŒμΌ“(ws λŒ€μ‹  ws)을 μ‚¬μš©ν•˜λŠ” κ²½μš°μ—λ§Œ ν•΄λ‹Ήλ©λ‹ˆλ‹€. wssλ₯Ό μ‚¬μš©ν•˜λ©΄ λͺ¨λ“  것이 잘 μž‘λ™ν•˜μ§€λ§Œ wssλ₯Ό μ‚¬μš©ν•˜λ©΄ μž„μ˜μ˜ μ‹œκ°„(~15λΆ„)에 μ‚°λ°œμ μœΌλ‘œ 연결이 λŠμ–΄μ§‘λ‹ˆλ‹€. 방화벽도 ν”„λ‘μ‹œλ„ μ—†μŠ΅λ‹ˆλ‹€.

@andrin-n-dream κ°μ‚¬ν•©λ‹ˆλ‹€. 제 생각도 SSLκ³Ό 관련이 μžˆλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€. ν΄λΌμ΄μ–ΈνŠΈλ‘œ Windows μ‹œμŠ€ν…œμ΄ 있고 μ„œλ²„λ‘œ μš°λΆ„νˆ¬ VM(λ™μΌν•œ μ‹œμŠ€ν…œ)이 μžˆμŠ΅λ‹ˆλ‹€. λΈŒλ¦¬μ§€λœ λ„€νŠΈμ›Œν¬ μ–΄λŒ‘ν„°. 일반적인 λ„€νŠΈμ›Œν¬ 연결에 λ¬Έμ œκ°€ λ°œμƒν•œ 적이 μ—†μŠ΅λ‹ˆλ‹€.

nginx SSL λ˜λŠ” sails.js SSL μ’…λ£Œλ₯Ό μ‚¬μš©ν•˜λŠ”μ§€ 여뢀에 관계없이 SSLμ—μ„œ λ°œμƒν•©λ‹ˆλ‹€.

NAVER - http://www.naver.com/

[email protected] λ‹˜κ»˜ 보내신 메일


λ°›λŠ” μ‚¬λžŒμ΄ νšŒμ›λ‹˜μ˜ 메일을 μˆ˜μ‹ μ°¨λ‹¨ ν•˜μ˜€μŠ΅λ‹ˆλ‹€.


λ‚˜λŠ” μ˜μ›νžˆ λ””λ²„κΉ…ν–ˆκ³  SSL에 λŒ€ν•œ λ‹€λ₯Έ μ†”λ£¨μ…˜μ„ 찾을 수 μ—†μ—ˆμ§€λ§Œ μˆ˜λ™μœΌλ‘œ λ‹€μ‹œ μ—°κ²°ν–ˆμŠ΅λ‹ˆλ‹€. engine.ioκ°€ λ‚˜λ₯Ό μœ„ν•΄ 이 μž‘μ—…μ„ μˆ˜ν–‰ν•˜κ³  전솑이 λ‹«νž λ•Œ λ‹€μ‹œ μ‹œλ„ν•˜λ©΄ 쒋을 κ²ƒμž…λ‹ˆλ‹€.

이에 λŒ€ν•œ 해결책이 μžˆμŠ΅λ‹ˆκΉŒ? λ‚˜λŠ” λ˜‘κ°™μ€ λ¬Έμ œκ°€ μžˆμŠ΅λ‹ˆλ‹€. λͺ‡ 초 후에 μ„œλ²„μ˜ 디버그 λ‘œκ·Έμ— ν•˜νŠΈλΉ„νŠΈ μ‹œκ°„ μ΄ˆκ³Όκ°€ λ°œμƒν•˜μ§€λ§Œ ν΄λΌμ΄μ–ΈνŠΈλŠ” μ—¬μ „νžˆ μ—°κ²°λ˜μ–΄ μžˆλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€.

λ‹€λ₯Έ κΈ΄κΈ‰ν•œ 문제둜 인해 ν™˜κ²½μ„ μ—…κ·Έλ ˆμ΄λ“œν–ˆμœΌλ©° 이제 λ°±λ²„λ„ˆμ— μžˆμŠ΅λ‹ˆλ‹€. λ…Έλ“œ 6.5.0이 μ–΄λ–€ 차이λ₯Ό λ§Œλ“œλŠ”μ§€ ν™•μΈν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€. Sails.jsλŠ” 일뢀 νŒ¨ν‚€μ§€λ₯Ό μ—…λ°μ΄νŠΈν•˜κ³  μ΄λŸ¬ν•œ μ €μˆ˜μ€€ κΈ°λŠ₯의 μ‚¬μš©μ„ λ³€κ²½ν–ˆμŠ΅λ‹ˆλ‹€...

μ—„μ²­λ‚œ μ–‘μ˜ λ ˆκ±°μ‹œ C++λ₯Ό λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ν•˜λŠ” μ€‘μ΄λ―€λ‘œ μ§€κΈˆ λ‹€μ‹œ 이 λ¬Έμ œμ— λŒ€ν•΄ μ•Œμ•„λ³Ό μ‹œκ°„μ΄ μ—†μŠ΅λ‹ˆλ‹€. μ•„λ§ˆλ„ μ˜¬ν•΄ λ§μ΄λ‚˜ 1μ›” 말일 κ²ƒμž…λ‹ˆλ‹€.

이것은 2.0.3μ—μ„œ μ—¬μ „νžˆ λ°œμƒν•©λ‹ˆλ‹€ ...
https://github.com/socketio/socket.io/issues/3025

ν•΄κ²° 방법이 μ—†μœΌλ©΄ ν΄λΌμ΄μ–ΈνŠΈμ˜ 25%κ°€ 이 문제λ₯Ό κ²ͺ을 것이기 λ•Œλ¬Έμ— socket.ioλŠ” 기본적으둜 μ‚¬μš©ν•  수 μ—†μŠ΅λ‹ˆλ‹€.

io.set('ν•˜νŠΈλΉ„νŠΈ νƒ€μž„μ•„μ›ƒ', 99999);

@Aaron1011 이것은 μ„œλ²„ μΈ‘ λ˜λŠ” ν΄λΌμ΄μ–ΈνŠΈ μ½”λ“œλ₯Ό μ˜λ―Έν•©λ‹ˆκΉŒ? μ„œλ²„ 츑이라면 ν΄λΌμ΄μ–ΈνŠΈ μΈ‘μ—μ„œ λ³€κ²½ν•΄μ•Ό ν•  사항이 μžˆμŠ΅λ‹ˆκΉŒ?

μ‹œν—˜μ„ 마친:
io.set('ν•˜νŠΈλΉ„νŠΈ νƒ€μž„μ•„μ›ƒ', 99999);
μ„œλ²„ μΈ‘μ—μ„œ socket.io v 2.0.3을 μ‚¬μš©ν•˜μ—¬ 문제λ₯Ό μˆ˜μ •ν•˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€. λ‹€μŒμ— 0.8.6으둜 λ‹€μš΄κ·Έλ ˆμ΄λ“œλ₯Ό μ‹œλ„ν•  κ²ƒμž…λ‹ˆλ‹€.

그것은 μ‹€μ œλ‘œ κ±°λŒ€ν•œ 토끼 ꡬ멍이기 λ•Œλ¬Έμ— 0.8.6으둜 λ‹€μš΄ κ·Έλ ˆμ΄λ“œ ν•  수 μ—†μŠ΅λ‹ˆλ‹€. λͺ¨λ“  ꡬ문이 λ³€κ²½λ˜μ—ˆμœΌλ©° 0.8.6μ—μ„œ 찾을 수 μžˆλŠ” λ¬Έμ„œκ°€ μ—†κΈ° λ•Œλ¬Έμ— μ†μ‹€λœ μ›μΈμž…λ‹ˆλ‹€. 이 문제λ₯Ό ν•΄κ²°ν•  수 있기λ₯Ό 바라며 κ³ λŒ€ λ²„μ „μœΌλ‘œ λ‹€μš΄κ·Έλ ˆμ΄λ“œν•˜κΈ° μœ„ν•΄ 앱을 λ‹€μ‹œ μž‘μ„±ν•˜κ³  싢지 μ•ŠμŠ΅λ‹ˆλ‹€.

v2.03에 λŒ€ν•œ 아이디어/μˆ˜μ • 사항이 μžˆλŠ” μ‚¬λžŒμ΄ μžˆμŠ΅λ‹ˆκΉŒ? λ‚΄κ°€ μ‹œλ„ν•œ 것듀:

  • pingInterval을 9999999둜 μ„€μ •
  • pingTimeout을 99999999둜 μ„€μ •
  • μ—°κ²° μœ μ§€λ‘œ μžλ™μœΌλ‘œ λ©”μ‹œμ§€λ₯Ό λ³΄λƒ…λ‹ˆλ‹€. 1μ΄ˆλ§ˆλ‹€ λ©”μ‹œμ§€λ₯Ό λ³΄λ‚΄μ§€λ§Œ μ—¬μ „νžˆ μž„μ˜μ˜ 연결이 λŠκΉλ‹ˆλ‹€.
  • λΉ„ν™œμ„±ν™”λœ λ°©ν™”λ²½
  • XHR 폴링 켜기/λ„κΈ°λ‘œ μ‹œλ„
  • 포트λ₯Ό λ¬΄μž‘μœ„μ—μ„œ 80으둜 λ³€κ²½ν–ˆμŠ΅λ‹ˆλ‹€.

λ‚˜λŠ” 그것이 μ½”λ”© 였λ₯˜κ°€ μ•„λ‹ˆλΌκ³  ν™•μ‹ ν•˜μ§€λ§Œ μΌλΆ€μ—μ„œλŠ” λ°œμƒν•˜κ³  μΌλΆ€μ—μ„œλŠ” λ°œμƒν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— PCμ—λ§Œ ν•΄λ‹Ήλ©λ‹ˆλ‹€. λ„€νŠΈμ›Œν¬ μ–΄λŒ‘ν„°μ™€ 관련이 μžˆμ„ 수 μžˆμŠ΅λ‹ˆλ‹€.

@forgeableSun 당신은 Primusλ₯Ό 기반으둜 앱을 μž‘μ„±ν•΄μ•Όν•©λ‹ˆλ‹€. λ‚˜λŠ” primus둜 λ‚΄ 앱을 λ¦¬νŒ©ν† λ§ν–ˆκ³  ν˜„μž¬ socketJλ₯Ό μ‚¬μš©ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

λ‹€λ₯Έ μ‹€μ‹œκ°„ ν”„λ‘œμ νŠΈλ₯Ό μ‚¬μš©ν•˜κΈ° μœ„ν•΄ λ‹€λ₯Έ ν”„λ‘œμ νŠΈμ—μ„œ μ½”λ“œλ₯Ό λ³€κ²½ν•  ν•„μš”κ°€ μ—†λŠ” λ‹€λ₯Έ ν”„λ‘œμ νŠΈλ₯Ό μ§€μ›ν•©λ‹ˆλ‹€.

λ¬Έμ•ˆ 인사.

@utan μ‹œλ„ν•΄λ³΄κ³  μ‹ΆμŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ ν•œ μ€„μ˜ μ½”λ“œλ‘œ socket.ioμ—μ„œ μ •ν™•νžˆ μ–΄λ–»κ²Œ μ „ν™˜ν•©λ‹ˆκΉŒ? λ‹€λ₯Έ ν”„λ ˆμž„μ›Œν¬μ—μ„œ μ „ν™˜ν•˜λŠ” μ˜ˆλŠ” μ—†λŠ” 것 κ°™μŠ΅λ‹ˆλ‹€.

npm μ„€μΉ˜ λΈŒλΌμš°μ € 채널 --μ €μž₯

var primus = new Primus(μ„œλ²„, { λ³€ν™˜κΈ°: 'λΈŒλΌμš°μ € 채널' });

https://github.com/primus/primus/blob/master/README.md#supported -real-time-frameworks

희망이 도움이 λ©λ‹ˆλ‹€.

λΈŒλΌμš°μ € 채널은 socket.io와 μ–΄λ–€ 관련이 μžˆμŠ΅λ‹ˆκΉŒ?

λ‹€λ₯Έ ν”„λ ˆμž„μ›Œν¬λ‘œ μ „ν™˜ν•˜λŠ” λ°©λ²•μ˜ 예일 λΏμž…λ‹ˆλ‹€.

예λ₯Ό λ“€μ–΄ λ¬Όμ–΄λ³΄λ‹ˆ..

μ’‹μŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ socket.ioλŠ” μ§€μ›λ˜λŠ” μ‹€μ‹œκ°„ ν”„λ ˆμž„μ›Œν¬ 쀑 ν•˜λ‚˜λ‘œ λ‚˜μ—΄λ˜μ§€λ„ μ•ŠμŠ΅λ‹ˆλ‹€. APIλ₯Ό μ „ν™˜ν•˜λŠ” 것은 단 ν•œ μ€„μ˜ μ½”λ“œκ°€ μ•„λ‹™λ‹ˆλ‹€. λ¬Έμ„œμ—μ„œ 예제λ₯Ό μ œκ³΅ν•˜μ§€ μ•Šκ³  μ–΄λ–»κ²Œ 이λ₯Ό κ΄‘κ³ ν•  수 μžˆλŠ”μ§€ λͺ¨λ₯΄κ² μŠ΅λ‹ˆλ‹€.

λ“€μ–΄λ³΄μ„Έμš”, socket.ioλŠ” >= 1 이후에 버그가 μžˆμŠ΅λ‹ˆλ‹€. 연결이 μ΄μƒν•©λ‹ˆλ‹€. λ‹€λ₯Έ ν”„λ ˆμž„μ›Œν¬λ‘œ μ „ν™˜ν•  수 μžˆλ„λ‘ primusλ₯Ό μ‚¬μš©ν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€.

κ·Έλ ‡κΈ° λ•Œλ¬Έμ— 예제λ₯Ό μ œκ³΅ν–ˆμŠ΅λ‹ˆλ‹€. λ¬Όλ‘  ν”„λ¦¬λ¨ΈμŠ€λ₯Ό μ‚¬μš©ν•˜λ €λ©΄ μ½”λ“œλ₯Ό λ¦¬νŒ©ν„°λ§ν•΄μ•Ό ν•©λ‹ˆλ‹€. 그런 λ‹€μŒ 자유둭게 λ‹€λ₯Έ ν”„λ ˆμž„μ›Œν¬λ₯Ό μ‚¬μš©ν•΄ 보고 μ–΄λ–€ ν”„λ ˆμž„μ›Œν¬κ°€ κ°€μž₯ μ ν•©ν•œμ§€ λ˜λŠ” ν•˜λ‚˜κ°€ μ€‘λ‹¨λ˜λ©΄ λ‹€λ₯Έ ν”„λ ˆμž„μ›Œν¬λ₯Ό μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

λ¬Έμ•ˆ 인사

@utan μ•Œκ² μŠ΅λ‹ˆλ‹€ . 전체 앱이 ν•΄λ‹Ή ν”„λ ˆμž„μ›Œν¬(예: μ–΄λŒ‘ν„°)둜 μž‘μ„±λ˜μ–΄ ν•˜λ‚˜μ˜ ν”„λ ˆμž„μ›Œν¬μ—μ„œ λ‹€λ₯Έ ν”„λ ˆμž„μ›Œν¬λ‘œ μ „ν™˜ν•˜κΈ° μœ„ν•œ λ³€ν™˜κΈ°λΌκ³  μƒκ°ν–ˆμŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ μ‹€μ œλ‘œλŠ” 전체 앱이 primus둜 μž‘μ„±λœ ν”„λ ˆμž„μ›Œν¬λ‘œ μ›ν™œν•˜κ²Œ μ „ν™˜ν•˜κΈ° μœ„ν•œ λ³€ν™˜κΈ°μž…λ‹ˆλ‹€.

사싀, 당신은 λ‚΄ 머리λ₯Ό μœ„λ‘œ κ°”λ‹€.. λ‚˜λŠ” κ·Έ 차이점을 잘 μ•Œμ§€ λͺ»ν•˜λŠ”데, μš°λ¦¬κ°€ 같은 것에 λŒ€ν•΄ μ΄μ•ΌκΈ°ν•˜κ³  μžˆλ‹€κ³  μƒκ°ν–ˆμŠ΅λ‹ˆλ‹€.

λ¬Έμ•ˆ 인사.

λ‚΄ μ„œλ²„ 둜그:
ν΄λΌμ΄μ–ΈνŠΈ μ—°κ²° 끊기. μ—°κ²° ν•΄μ œ 이유: "전솑 μ’…λ£Œ"
ν΄λΌμ΄μ–ΈνŠΈ μ—°κ²° 끊기. μ—°κ²° ν•΄μ œ 이유: "전솑 μ’…λ£Œ"
ν΄λΌμ΄μ–ΈνŠΈ μ—°κ²° 끊기. μ—°κ²° ν•΄μ œ 이유: "전솑 μ’…λ£Œ"
ν΄λΌμ΄μ–ΈνŠΈ μ—°κ²° 끊기. μ—°κ²° ν•΄μ œ 이유: "전솑 μ’…λ£Œ"
ν΄λΌμ΄μ–ΈνŠΈ μ—°κ²° 끊기. μ—°κ²° ν•΄μ œ 이유: "전솑 μ’…λ£Œ"
ν΄λΌμ΄μ–ΈνŠΈ μ—°κ²° 끊기. μ—°κ²° ν•΄μ œ 이유: "전솑 μ’…λ£Œ"
ν΄λΌμ΄μ–ΈνŠΈ μ—°κ²° 끊기. μ—°κ²° ν•΄μ œ 이유: "전솑 μ’…λ£Œ"
ν΄λΌμ΄μ–ΈνŠΈ μ—°κ²° 끊기. μ—°κ²° ν•΄μ œ 이유: "전솑 μ’…λ£Œ"
ν΄λΌμ΄μ–ΈνŠΈ μ—°κ²° 끊기. μ—°κ²° ν•΄μ œ 이유: "전솑 μ’…λ£Œ"
ν΄λΌμ΄μ–ΈνŠΈ μ—°κ²° 끊기. μ—°κ²° ν•΄μ œ 이유: "전솑 μ’…λ£Œ"
ν΄λΌμ΄μ–ΈνŠΈ μ—°κ²° 끊기. μ—°κ²° ν•΄μ œ 이유: "전솑 μ’…λ£Œ"
ν΄λΌμ΄μ–ΈνŠΈ μ—°κ²° 끊기. μ—°κ²° ν•΄μ œ 이유: "전솑 μ’…λ£Œ"
ν΄λΌμ΄μ–ΈνŠΈ μ—°κ²° 끊기. μ—°κ²° ν•΄μ œ 이유: "전솑 μ’…λ£Œ"
ν΄λΌμ΄μ–ΈνŠΈ μ—°κ²° 끊기. μ—°κ²° ν•΄μ œ 이유: "전솑 μ’…λ£Œ"
ν΄λΌμ΄μ–ΈνŠΈ μ—°κ²° 끊기. μ—°κ²° ν•΄μ œ 이유: "전솑 μ’…λ£Œ"
ν΄λΌμ΄μ–ΈνŠΈ μ—°κ²° 끊기. μ—°κ²° ν•΄μ œ 이유: "전솑 μ’…λ£Œ"
ν΄λΌμ΄μ–ΈνŠΈ μ—°κ²° 끊기. μ—°κ²° ν•΄μ œ 이유: "전솑 μ’…λ£Œ"
ν΄λΌμ΄μ–ΈνŠΈ μ—°κ²° 끊기. μ—°κ²° ν•΄μ œ 이유: "전솑 μ’…λ£Œ"
ν΄λΌμ΄μ–ΈνŠΈ μ—°κ²° 끊기. μ—°κ²° ν•΄μ œ 이유: "전솑 μ’…λ£Œ"
ν΄λΌμ΄μ–ΈνŠΈ μ—°κ²° 끊기. μ—°κ²° ν•΄μ œ 이유: "전솑 μ’…λ£Œ"
ν΄λΌμ΄μ–ΈνŠΈ μ—°κ²° 끊기. μ—°κ²° ν•΄μ œ 이유: "전솑 μ’…λ£Œ"
ν΄λΌμ΄μ–ΈνŠΈ μ—°κ²° 끊기. μ—°κ²° ν•΄μ œ 이유: "전솑 μ’…λ£Œ"
ν΄λΌμ΄μ–ΈνŠΈ μ—°κ²° 끊기. μ—°κ²° ν•΄μ œ 이유: "전솑 μ’…λ£Œ"
ν΄λΌμ΄μ–ΈνŠΈ μ—°κ²° 끊기. μ—°κ²° ν•΄μ œ 이유: "전솑 μ’…λ£Œ"
ν΄λΌμ΄μ–ΈνŠΈ μ—°κ²° 끊기. μ—°κ²° ν•΄μ œ 이유: "전솑 μ’…λ£Œ"
ν΄λΌμ΄μ–ΈνŠΈ μ—°κ²° 끊기. μ—°κ²° ν•΄μ œ 이유: "전솑 μ’…λ£Œ"
ν΄λΌμ΄μ–ΈνŠΈ μ—°κ²° 끊기. μ—°κ²° ν•΄μ œ 이유: "전솑 μ’…λ£Œ"
ν΄λΌμ΄μ–ΈνŠΈ μ—°κ²° 끊기. μ—°κ²° ν•΄μ œ 이유: "전솑 μ’…λ£Œ"
ν΄λΌμ΄μ–ΈνŠΈ μ—°κ²° 끊기. μ—°κ²° ν•΄μ œ 이유: "전솑 μ’…λ£Œ"
ν΄λΌμ΄μ–ΈνŠΈ μ—°κ²° 끊기. μ—°κ²° ν•΄μ œ 이유: "전솑 μ’…λ£Œ"

λŒ€κ·œλͺ¨ μž¬μž‘μ„±μ„ ν¬ν•¨ν•˜λŠ” ws(https://github.com/websockets/ws)둜 μ „ν™˜ν–ˆμ§€λ§Œ 이제 ν΄λΌμ΄μ–ΈνŠΈ μΈ‘μ—μ„œ κΈ°λ³Έ websocket λΈŒλΌμš°μ € 개체λ₯Ό μ‚¬μš©ν•˜κ³  λͺ¨λ“  것이 μ™„λ²½ν•˜κ²Œ μž‘λ™ν•©λ‹ˆλ‹€. 더 이상 λ¬Έμ œκ°€ μ—†μŠ΅λ‹ˆλ‹€. μ˜€λžœλ§Œμ΄λ‹€ socket.io!

10~30λΆ„ 후에 랜덀으둜 연결이 λŠκ²ΌμŠ΅λ‹ˆλ‹€. λ‚΄ ν˜ΈμŠ€νŒ… μ„œλΉ„μŠ€κ°€ Apache 곡유 μ„œλ²„μ—μ„œ Passenger와 ν•¨κ»˜ NodeJSλ₯Ό μ‹€ν–‰ν•œλ‹€λŠ” 것을 κΈ°μ–΅ν–ˆμŠ΅λ‹ˆλ‹€. λ‚˜λŠ” 그것을 μ •λ§λ‘œ μ΄ν•΄ν•˜μ§€ λͺ»ν•˜μ§€λ§Œ 기본적으둜 μ΄λŸ¬ν•œ μ’…λ₯˜μ˜ ν†΅ν•©μ—μ„œ μ›Ή μ†ŒμΌ“μ— λ¬Έμ œκ°€ μžˆμŠ΅λ‹ˆλ‹€. λ‚˜λŠ” Transports: ['polling'] 만 μ„€μ •ν•˜μ—¬ ν…ŒμŠ€νŠΈν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. 반면 localhostμ—μ„œλŠ” 였λ₯˜ 및 λ“œλ‘­μ•„μ›ƒ 없이 Transports: ['websockets', 'polling']둜 μ‹€ν–‰ν•©λ‹ˆλ‹€. 30λΆ„ ν›„ μ§€κΈˆκΉŒμ§€ λ„ˆλ¬΄ μ’‹μ•˜μŠ΅λ‹ˆλ‹€...

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