λλ socket.io v.1.4.5 w expressλ₯Ό μ€μ νκ³ ν΄λΌμ΄μΈνΈμμ μ€λͺ ν μ μλ μ°κ²° λκΉμ μμΈμ μΆμ ν μ μμμ΅λλ€. ν΄λΌμ΄μΈνΈμ μ°κ²° λκΈ° μ΄λ²€νΈκ° μ 곡νλ μ΄μ λ "μ μ‘ μ’ λ£"μ λλ€. μΌλΆ ν΄λΌμ΄μΈνΈμμλ λ§€μ° μΌκ΄λκ² λ°μν©λλ€.
ν΄λΌμ΄μΈνΈκ° μκ° κ°κ²©μΌλ‘ 보μ΄λ κ²μ λν΄ "μ μ‘ λ«κΈ°" μ°κ²°μ΄ λμ΄μ§λ κ²μ λν μ€λͺ μ΄ μμ΅λκΉ? ν΄λΌμ΄μΈνΈλ μ¬μ μμ μ λμ§λ§ λ무 μμ£Ό λ°μνκΈ° λλ¬Έμ λ§€μ° λΆνΈν©λλ€.
pingInterval, pingTimeout λ° μΉ μμΌμ© ν¬νΈ λ³κ²½κ³Ό κ°μ λ€μν μ€μ μ μλνμ΅λλ€(νμ¬ ν¬νΈ 80μ μ¬μ© μ€μ λλ€). νμ§λ§ μ무리 μκ°ν΄λ λ¬Έμ λ μ¬λΌμ§μ§ μμ΅λλ€.
socket.io v2.0.3μΌλ‘ μ λ°μ΄νΈλμμ΅λλ€. μ¬μ ν λ¬Έμ κ° μμ΅λλ€. λ΄ PC μ€ νλμμλ§ λ°μνλ κ² κ°μ΅λλ€. Windows λ°©νλ²½λ λΉνμ±ννμ§λ§ λ¬Έμ κ° κ³μ λ°μν©λλ€.
λκ·λͺ¨ μ¬μμ±μ ν¬ν¨νλ ws(https://github.com/websockets/ws)λ‘ μ ννμ§λ§ μ΄μ ν΄λΌμ΄μΈνΈ μΈ‘μμ κΈ°λ³Έ websocket λΈλΌμ°μ κ°μ²΄λ₯Ό μ¬μ©νκ³ λͺ¨λ κ²μ΄ μλ²½νκ² μλν©λλ€. λ μ΄μ λ¬Έμ κ° μμ΅λλ€. μ€λλ§μ΄λ€ socket.io!
κ°μ μΌμ κ²ͺκ³ μμ΅λλ€. λλ μ λ§λ‘ μ¬μμ±μ κ±°μ³μΌ νλ κ²μ μνμ§ μλλ€. μ΄ λ¬Έμ λ‘ μ±κ³΅ν μ¬λμ΄ μμ΅λκΉ?
λλ μ΄ λ¬Έμ μ μ λ§ μ§μ³€λ€.
"socket.io-client"λ‘ "socket.io" λ²μ μ νμΈν΄μΌ νλ€κ³ μκ°ν©λλ€.
μλ²/ν΄λΌμ΄μΈνΈ λ²μ μ΄ μΌμΉνμ§ μμΌλ©΄ μ°κ²°μ΄ λ§€μ° λΆμμ ν©λλ€.
ν΄λΌμ΄μΈνΈλ μλμ κ°μ΄ λ¨μν CDNμ μ¬μ©νλ κ²μ΄ μ’μ΅λλ€.
@ref: https://cdnjs.com/libraries/socket.io
I hope it helps.
λ΄κ±΄ μ μ κ°λ°μ?? λλ¨ν΄.
λλμ΄ λ¬Έμ κ° μμ΅λλ€.
μ μ‘ μ’
λ£ λ° ν μκ° μ΄κ³Όλ‘ μΈν΄ μ¬μ©μμ μ°κ²°μ΄ 무μμλ‘ λμ΄μ‘μ΅λλ€.
λλ λν λ§μ μ΅μ
(ping κ°κ²©, ping μκ° μ΄κ³Ό, μ μ‘ ...)μ λ³κ²½νλ €κ³ μλνμ§λ§ μλνμ§ μμ΅λλ€.
μλ² λ° ν΄λΌμ΄μΈνΈμ socket.io λ²μ μ νμΈνμ΅λλ€.
λ§μ μ¬λλ€μ΄ μ΄ λ¬Έμ λ‘ κ³ ν΅λ°κ³ μμ§λ§ λλ μ΄λ€ ν΄κ²°μ±
λ μ°Ύμ μ μμ΅λλ€.
μ΄ λ¬Έμ μ λν μμμ΄ μμ΅λλ€. λκ°μ λ¬Έμ κ° μκΈ° λλ¬Έμ λλ€!
k8nsμ λ°°ν¬ν λλ λμΌν λ¬Έμ κ° μμ§λ§ λ‘μ»¬λ‘ μ€ννλ©΄ μ λλ‘ μλν©λλ€.
μ λ μ΄κ²λλ¬Έμ κ΄΄λ‘μμ...
@talas9 @muhammadnasr @htamop λ¬Έμ λ₯Ό λλ²κ·Έ/μ¬νν μ μλ μΌλ°μ μΈ μ§λ¬Έ:
κ°μ¬ ν΄μ!
λλ 2.1.0κ³Ό 2.0.4 ν΄λΌμ΄μΈνΈμ μλ²μμ κ·Έκ²μ μλνλ€. ν¬λ‘¬ λ° μ¬ν리(μ΅μ ).
λ‘컬μμ μ€ννλ©΄ μ μλνμ§λ§(μ°κ²° ν΄μ μμ΄ 1μκ° μ΄μ μ°κ²°ν μ μμ) μμ λ‘λ λ°Έλ°μ λ€μ μλ K8nsμ λ°°ν¬νλ©΄ μ΄ λ¬Έμ κ° λ°μν©λλ€...
μ°Έκ³ λ‘ μ°κ²°μ λ§€λ² μ νν 25μ΄ νμ λ«νλλ€. μ€ν¬λ¦°μ· μ°Έμ‘°
@talas9 @htamop @dnwldbs84 λ‘λλ°Έλ°μλ₯Ό μ¬μ©νκ³ κ³μ κ°μ?
@darrachequesne socket.io μ ν¨κ» μ¬μ©νλ κ²μ κΆμ₯νλ λ‘λ λ°Έλ°μλ 무μμ λκΉ?
@muhammadnasr @darrachequesne
2.1.0 μλ²μ 1.0.0 ν΄λΌμ΄μΈνΈ(μλλ‘μ΄λ)λ₯Ό μ¬μ©νμ΅λλ€.
8~9μκ° λμ μ°κ²°μ μμ μ μΌλ‘ μ μ§ν΄μΌ νμ§λ§ μκΈ°μΉ μκ² μ°κ²°μ΄ λμ΄μ§λλ€.
λ λ²μ μ λͺ¨λ 1.7.4μ 0.8.3μΌλ‘ λ³κ²½νμ΅λκΉ? λ€λ₯Έ μ루μ
κ²μλ¬Όμ λ°λ₯΄λ©΄. λ΄μΌ μλλ©΄ ν
μ€νΈ ν΄λ΄μΌκ² μ΅λλ€
λ‘λ λ°Έλ°μλ₯Ό μ¬μ©νμ§ μμμ΅λλ€. ν΄λΌμ΄μΈνΈμ μλ² λͺ¨λ 2.0.3 λ²μ μ Socket.ioλ₯Ό μ¬μ©νμ΅λλ€(μ¬μ©ν λͺ¨λ λ²μ μ κΈ°μ΅ν μ μμ). μ΄λ€ λΈλΌμ°μ κ° λ¬Έμ λ₯Ό μΌμΌν€λμ§ λͺ¨λ₯΄μ§λ§ λλΆλΆμ μ¬μ©μλ Chromeμ μ¬μ©νμ΅λλ€. μ κ²½μ° μ°κ²° λκΉμ΄ λλ€μ΄λΌ μ¬μμ΄ μλλ€μ.
κ·Έλ¦¬κ³ λλ wsλ‘ λ³κ²½νμ΅λλ€. λ¬Έμ κ° ν΄κ²°λμλμ§ μ λͺ¨λ₯΄κ² μ΅λλ€.
@muhammadnasr @darrachequequesne @dnwldbs84
μ κ²½μ°μλ ν΄κ²°λμλ€κ³ μκ°ν©λλ€.
Android ν¬κ·ΈλΌμ΄λ μλΉμ€(api 26)μμ 0.8.3 socket.io-clientλ₯Ό μ¬μ©νκ³ nodejs μλ²μμ 1.3.5 λ²μ μ μ¬μ©ν©λλ€.
κ·Έλ¬λ λ¬Έμ λ λ²μ μ΄ μλ μ μμ΅λλ€.
μλ²μ pingIntervalμ 10msλ‘ λ³κ²½νλλ° μ λλ‘ μλνλ κ² κ°μ΅λλ€(ping νμμμ λ° μ μ‘ μ’
λ£κ° λ°μνμ§ μμ)
var io = require('socket.io')(http, {pingInterval: 10, pingTimeout: 4000});
10λ°λ¦¬μ΄λ λ무 μ’μ΅λλ€. μ΄λ κ² νλ©΄ λ€νΈμν¬κ° μλλ κ²μ λλ€.
10λ°λ¦¬μ΄λ μ’κΈ° λλ¬Έμ λ€νΈμν¬κ° μλλ κ²μ λλ€.
μ³μ!
@muhammadnasr λͺ¨λ λ‘λ λ°Έλ°μκ° μλν΄μΌ ν©λλ€. λ€μ μλ₯Ό μ°Έμ‘°νμμμ€.
ν΄λ§(κΈ°λ³Έκ°)μ νμ±ννλ©΄ κ³ μ μΈμ μ΄ νμν©λλ€.
@darrachequesne κ°μ λ¬Έμ κ° μμ΅λλ€. 8~9μκ° νμ "μ μ‘ μ’ λ£"λ‘ μΈν΄ μμΌμ΄ λμ΄μ§λλ€.
λλ μ¬μ©νκ³ μλ€ :
Chrome: 61.0.3163.100
Electron: 2.0.2
Socket.io: 2.1.1
λμΌν λ¬Έμ κ° μμλλ° μ΄ μ£Όμ https://github.com/socketio/socket.io/issues/3025#issuecomment -329024833 μμ CDNμ μ¬μ©νμ¬ ν΄κ²°ν μ μμκ³ μλμ κ°μ΄ μκ° μ΄κ³Ό λ° κ°κ²©μ μ€μ ν μ μμμ΅λλ€.
io.set('heartbeat timeout', 60000);
io.set('heartbeat interval', 25000);
μ΄λ΄,
Kubernetes λ° NGINX Ingress Controllerμμ μ€νν λ socket.ioμ λμΌν λ¬Έμ κ° μμ΅λλ€.
nginx ꡬμ±μ΄ λ€μ λ‘λλλ©΄ νλ‘μΈμ€κ° λ€μ μμ±λκ³ κΈ°μ‘΄ ν΅μ μ΄ λͺ¨λ μμ λμ΄ transport close
, μμ 컨νΈλ‘€λ¬λ₯Ό μ¬μ©νλ λ€λ₯Έ λ°°ν¬λ‘ μΈν΄ ꡬμ±μ΄ λ€μ λ‘λλ μ μμ΅λλ€.
μ°μ μ΄ λ©μ§ νλ‘μ νΈμ μ λ§ κ°μ¬λ립λλ€.
μ¬κΈ°μλ κ°μ λ¬Έμ κ° μμ΅λλ€. μλ§λ μλ‘μ΄ κ²μ κ°μ Έμ¬ κ²μ λλ€.
λ
Έλ jsμ ws μλ²μ ws ν΄λΌμ΄μΈνΈκ° μμ΅λλ€.
μ΄ ws ν΄λΌμ΄μΈνΈλ μλΉμ€(λ§μ΄ν¬λ‘ μλΉμ€)μΈ node js μ±μμ μ¬μ©λ©λλ€.
μΉ λΈλΌμ°μ μ λ€λ₯Έ ws ν΄λΌμ΄μΈνΈ(ν΄λΌμ΄μΈνΈ μ±)λ ws μλ²λ₯Ό ν΅ν΄ μ΄ node js μλΉμ€μ ν΅μ ν©λλ€.
λͺ¨λ κ²μ΄ μμλλ‘ μλν©λλ€.
νμ¬ μ€νΈλ μ€ ν μ€νΈμμ(10λͺ μ ν΄λΌμ΄μΈνΈκ° μ§μ€μ μΌλ‘ λ°μ΄ν°λ₯Ό μμ²νκ³ μμ) ν μ€νΈκ° λλλ©΄ λͺ¨λ μμ κ³Ό νΈλμμ μ΄ μλ£λλ©΄ μλΉμ€ μ°κ²°μ΄ "μ μ‘ λ«κΈ°" μ€λ₯μ ν¨κ» λ«νλλ€. μ΄κ²μ νμ λ°μνλ κ²μ μλλλ€.
λ€μμ μλ² κ΅¬μ±μ
λλ€.
ννμμμ: 15000,
ν κ°κ²©: 20000,
λ‘λκ° λ§μ λμ μΌλΆ νμ΄ μμ€λ κ² κ°μ΅λλ€...? λλ λλ λͺ¨λ₯Έλ€.
μ΄κ²μ λ΄κ° κΈ°λν΄μΌ νλ κ²μ
λκΉ?
λν κΈ°λ³Έ ꡬμ±μΈ pingTimeout: 2000μ μ¬μ©νλ©΄ μ€νΈλ μ€ ν μ€νΈ λμ€μ μ΄ μ€λ₯κ° λ°μνμ΅λλ€. μ΄ λν μμ ν μμμΉ λͺ»ν μΌμ΄μ§λ§ μλ²μ κ³ΌλΆνκ° κ±Έλ € 2μ΄(!) μ΄λ΄μ μλ΅ν μ μκ³ μ΄ μ€λ₯κ° λ°μν μ μλ€κ³ κ°μ ν΄ λ³΄κ² μ΅λλ€. κ·Έλ¬λ μ΄μ pingTimeout: 15000μ μ¬μ©νλ©΄ κ±°μ 50%κ° λ°μνλ©° ν μ€νΈκ° λλ νμλ§ λ°μν©λλ€.
ν , λλ λ§μ΄ν¬λ‘ μλΉμ€κ° κ°μ λμμ μ€νλλλΌλ μ΄λ° μ’ λ₯μ μ€λ₯λ₯Ό μμν΄μΌ νλ€κ³ μκ°νμ§λ§, μ§λ¬Έμ μ μ΄λ° μΌμ΄ λ°μνλ κ²μ λκΉ?
μ΄ λ¬Έμ λ₯Ό μ¬ννκΈ° μν΄ μμ μ€μ μ λ§λ€λ €κ³ νμ§λ§ λ§λ€μ§ λͺ»νμ΅λλ€.
λ‘κ·Έλ₯Ό νμ±ννλ λ°©λ²μ 무μμ λκΉ? DEBUG=socket.io*κ° μλνμ§ μμ΅λλ€. λ³μκ° μ€μ λμ΄ μμ΄λ μΆλ ₯μ΄ λμ€μ§ μμ΅λλ€.
λλ μ΄κ²μ΄ #2924μ κ΄λ ¨μ΄ μλ€κ³ κ°λ ₯νκ² λ―Ώλλ€.
ν΄λΌμ΄μΈνΈμ μ¬μ°κ²°μ λ°°ν°λ¦¬λ₯Ό μ μ½νκΈ° μν΄ λΉνμ±νλ νμ λν μΌλΆ λΈλΌμ°μ (safari λ° chrome) μ‘°μ νμ΄λ¨Έλ‘ μΈν΄ λ°μν©λλ€.
κ·Έ κ²°κ³Ό pingTimeoutμΌλ‘ μΈν΄ μ°κ²°μ λ«λ ν΄λΌμ΄μΈνΈμ μλ²μ μ§μ°λ ννΈλΉνΈ λ©μμ§κ° μμ±λ©λλ€.
pingTimeoutμ λ리면 μ΄λ μ λ μλνμ§λ§ μ¬μ ν νλ‘λμ
νκ²½μμ λ€μ μ°κ²°λ©λλ€.
k8nsμ λ°°ν¬ν λλ λμΌν λ¬Έμ κ° μμ§λ§ λ‘μ»¬λ‘ μ€ννλ©΄ μ λλ‘ μλν©λλ€.
@muhammadnasr μ΄λμ
@ bheema01 νλ‘μ/λ‘λ λ°Έλ°μμμstickysessionμ΄ νμ±νλμ΄ μλμ§ νμΈνκ³ μλν΄μΌ ν©λλ€.
κ°μ μ€λ₯κ° λ°μνμ΅λλ€
λμΌν λ¬Έμ ..... μλ² μΈ‘ μμΌ λμ μ΄ λ‘λ λ°Έλ°μ λ€μ μμ λ ν΄λΌμ΄μΈνΈκ° λ°λ³΅μ μΌλ‘ μ°κ²° λ° μ°κ²° ν΄μ λ©λλ€. κ³ μ μΈμ μ ꡬμ±ν νμλ λ¬Έμ κ° μ¬μ ν μ‘΄μ¬ν©λλ€. @muhammadnasr μ΄ λ¬Έμ λ₯Ό ν΄κ²°ν μ μμμ΅λλ€.
μ€λ λκ° 200ms μ΄μ μμ£Ό μ°¨λ¨λ λ μ΄ μ€λ₯λ₯Ό 보μμ΅λλ€.
μ΄λ° μΌμ΄ μμ£Ό λ°μνλ©΄ socket.io _λ° μ±μλ _ μ’μ§ μμ΅λλ€.
socket.ioμλ μ°κ²°μ ννΈλΉνΈλ₯Ό νμΈνκΈ° μν μκ° μ΄κ³Όκ° μμ΅λλ€.
μ΄ μκ° μ΄κ³Όκ° μ΄κ³Όλλ©΄ μ°κ²°μ΄ μ’
λ£λκ³ μ΄ μ€λ₯κ° λ°μν©λλ€.
@varunSabnis λ κ³ μ μΈμ μ μμ ν ν λͺ¨λ κ²μ΄ μννκ² μλνμ΅λλ€.
@dennisat λ΄ ν΄λΌμ΄μΈνΈκ° ν ν¨ν·μ μμ νλ λ° κ±Έλ¦¬λ μκ°μ νμΈνλ €κ³ νμ΅λλ€. 200msλ₯Ό μ΄κ³Όν λλ§λ€ ν΄λΌμ°λμ μμΌ μλ²μ λ΄ λ‘컬 νΈμ€νΈμ μμΌ μλ²μμ λͺ¨λ ν
μ€νΈλμμ΅λλ€. λ‘컬 μ€μ μ μμΌμ μ°κ²°μ λμ§ μμ΅λλ€(λͺ¨λ κ²μ΄ μ μλν¨). λ°λ©΄ ν΄λΌμ°λ μ€μ μμλ μμΌμ΄ μ§μμ μΌλ‘ μ°κ²° λ° μ°κ²° ν΄μ λ©λλ€. κ·Έλμ, λλ κ·Έκ²μ΄ λ¬Έμ λΌκ³ μκ°νμ§ μμ΅λλ€.
@muhammadnasr μμμ΄, λλ¨ν΄. μ€μ λ‘ νμ±ννμ§λ§ μ¬μ ν λͺ κ°μ§ λ¬Έμ κ° μμ΅λλ€.
@muhammadnasr @darrachequequesne @dnwldbs84
μ κ²½μ°μλ ν΄κ²°λμλ€κ³ μκ°ν©λλ€.
Android ν¬κ·ΈλΌμ΄λ μλΉμ€(api 26)μμ 0.8.3 socket.io-clientλ₯Ό μ¬μ©νκ³ nodejs μλ²μμ 1.3.5 λ²μ μ μ¬μ©ν©λλ€.
κ·Έλ¬λ λ¬Έμ λ λ²μ μ΄ μλ μ μμ΅λλ€.
μλ²μ pingIntervalμ 10msλ‘ λ³κ²½νλλ° μ λλ‘ μλνλ κ² κ°μ΅λλ€(ping νμμμ λ° μ μ‘ μ’ λ£κ° λ°μνμ§ μμ)
var io = require('socket.io')(http, {pingInterval: 10, pingTimeout: 4000});
κ·Έκ²μ λ§λ²μ²λΌ μλν©λλ€, κ°μ¬ν©λλ€!!!!!!!
ν κ°κ²©λ§λ€ 'μ μ‘ μ’ λ£'κ° λ°μνμ΅λλ€.
λλ μ΄ λ¬Έμ μ μ λ§ μ§μ³€λ€.
"socket.io-client"λ‘ "socket.io" λ²μ μ νμΈν΄μΌ νλ€κ³ μκ°ν©λλ€.
μλ²/ν΄λΌμ΄μΈνΈ λ²μ μ΄ μΌμΉνμ§ μμΌλ©΄ μ°κ²°μ΄ λ§€μ° λΆμμ ν©λλ€.ν΄λΌμ΄μΈνΈλ μλμ κ°μ΄ λ¨μν CDNμ μ¬μ©νλ κ²μ΄ μ’μ΅λλ€.
@ref: https://cdnjs.com/libraries/socket.io
I hope it helps.
It works even more magically.
Seems that we can close this issue with your answer, haha
λ§μ§λ§μΌλ‘ ν΄λΌμ΄μΈνΈμ μλ²μ λ²μ μ΄ μΌμΉνμ§ μκΈ° λλ¬Έμ΄λΌλ κ²μ μμμ΅λλ€.
ν΄λΌμ΄μΈνΈμ μλ²κ° λμΌν λ²μ μ socket.ioλ₯Ό 곡μ νλλ‘ νλ©΄ μ΄μ λͺ¨λ κ²μ΄ μ μλν©λλ€.
λλ ping pong λ‘μ§μ΄ socket.ioμ λ€λ₯Έ λ²μ μμ λ€λ₯Ό μ μλ€κ³ μκ°νκ³ μλ²λ 'transport close' λ©μμ§λ₯Ό μ 곡νλ ping κ°κ²©μΌλ‘ ν΄λΌμ΄μΈνΈ μΈ‘μμ ping μ΄λ²€νΈλ₯Ό μμ νμ§ λͺ»νμ΅λλ€.
Google Cloud Platform(GCP)μ λ°°ν¬ν ν 30μ΄λ§λ€ socket.io μ°κ²°μ΄ λμ΄μ§λ λ¬Έμ κ° λ°μνμ΅λλ€. Global Load Balancerμμ μ¬μ©νλ κΈ°λ³Έ http μκ° μ΄κ³Όλ‘ νλͺ
λμμ΅λλ€. GCP λ¬Έμμλ μΉ μμΌμ μ¬μ©ν λ κ°μ λ³κ²½ν΄μΌ νλ€κ³ λμ μμ΅λλ€. μ€μ λ³κ²½ μ§μΉ¨μ λ€μκ³Ό κ°μ΅λλ€.
https://cloud.google.com/load-balancing/docs/backend-service#timeout -μ€μ
"socket.io": "2.2.0"μμ μ¬μ ν λμΌν λ¬Έμ μ μ§λ©΄νκ³ μμ΅λλ€.
"socket.io-client": "2.2.0",
socket.io- ν΄λΌμ΄μΈνΈ:μμΌ λ«κΈ°(ν μκ° μ΄κ³Ό) +22μ΄
μ¬κΈ°λ λ§μ°¬κ°μ§μ λλ€. λ‘컬 μλ²μλ λ¬Έμ κ° λ°μνμ§ μμ΅λλ€. κ·Έλ¬λ λ‘λ λ°Έλ°μ λ€μ λ°°μΉν λ 무μμλ‘ ν μκ° μ΄κ³Όκ° λ°μν©λλ€. μλ§ 50λ² μ€ 1λ²μΌ κ²λλ€. CDN λ²μ μ μ¬μ©νκ³ κ³ μ μΈμ μ μΆκ°νλ €κ³ νμ΅λλ€. λ¬Έμ λ μ¬μ ν μ‘΄μ¬ν©λλ€.
μΌλΆ μ¬μ©μ μ§μ μ¬μ°κ²° λ Όλ¦¬ μΈμλ μ무 κ²λ μλνμ§ μμμ΅λλ€. ν΄λΌμ΄μΈνΈκ° μ΄μ IDμ λ€λ₯Έ IDλ‘ μμΌ μ΄κΈ° μ΄λ²€νΈλ₯Ό λ°μΌλ©΄ μλ²μ μ΄μ IDμ μ IDλ‘ λ€μ μ°κ²° μ΄λ²€νΈλ₯Ό 보λ λλ€. κ·Έλ° λ€μ μλ²μμ νλ μ΄μ΄μ μμΌ IDλ₯Ό μ λ°μ΄νΈνκ³ κ²μ μνλ₯Ό λ€μ 보λ λλ€.
@tmusaev ν΄λΌμ΄μΈνΈμ λν μ¬μ©μ μ§μ μ¬μ°κ²° λ Όλ¦¬λ₯Ό κ²μν μ μμ΅λκΉ?
λμΌν λ¬Έμ κ° μμ΅λλ€: 'μ΄μ‘ λ§κ°'
κ°μ λ¬Έμ κ° μμ΅λλ€. λ§μΉ¨λ΄ λλ κ·Έκ²μ ν΄κ²°ν©λλ€. Nginxλ λ΄ νλ‘μ μλ²μ΄μ§λ§ proxy_read_timeout
of config λ 60s μ
λλ€. μ΄λ ν΄λΌμ΄μΈνΈ λλ μλ²κ° 60s λμ λ©μμ§λ₯Ό λ΄λ³΄λ΄μ§ μμΌλ©΄ nginxκ° μ°κ²°μ λκΈ° λλ¬Έμ transport close
errorMsgλ₯Ό μ»μ μ μμμ λνλ
λλ€.
ν΄κ²°μ± :
proxy_read_timeout
λ₯Ό 600μ΄ μ΄μμΌλ‘ μ¦κ°setInterval
λ₯Ό μ¬μ©νμ¬ νλ°νΈ μλμμ λ©μμ§ λ³΄λ΄κΈ°"react": "16.8.3",
"react-native": "^0.59.9",
"socket.io": "^2.2.0"
μ λ μ΄ λΌμ΄λΈλ¬λ¦¬λ₯Ό μ±ν κ³Ό μ΄λ²€νΈμ μ¬μ©νμ΅λλ€. iOSμμλ μ μλνμ§λ§ Androidμμλ λ¬Έμ κ° λ°μν©λλ€. μΈμ λ μ§ μμΌ μ°κ²°μ λμλ€κ° λ€μ μ°κ²°νμμμ€. μ§μμ μΌλ‘ λμΌν λμμ νμν©λλ€. λν μ΄ μ μ‘μ λ«κ±°λ ping μκ° μ΄κ³Ό μ€λ₯λ₯Ό μ 곡ν©λλ€.
"react": "16.8.3", "react-native": "^0.59.9", "socket.io": "^2.2.0"
μ λ μ΄ λΌμ΄λΈλ¬λ¦¬λ₯Ό μ±ν κ³Ό μ΄λ²€νΈμ μ¬μ©νμ΅λλ€. iOSμμλ μ μλνμ§λ§ Androidμμλ λ¬Έμ κ° λ°μν©λλ€. μΈμ λ μ§ μμΌ μ°κ²°μ λμλ€κ° λ€μ μ°κ²°νμμμ€. μ§μμ μΌλ‘ λμΌν λμμ νμν©λλ€. λν μ΄ μ μ‘μ λ«κ±°λ ping μκ° μ΄κ³Ό μ€λ₯λ₯Ό μ 곡ν©λλ€.
+1
μ°λ¦¬μ κ²½μ° λ¬Έμ λ CDN νλ‘μλ‘ μΈν΄ λ°μν©λλ€. λλ socket.ioλ₯Ό CDN νλ‘μκ° μλ μλ μ¬μ΄νΈμ μ°κ²°νμ¬ μ΄ λ¬Έμ λ₯Ό ν΄κ²°νμ΅λλ€.
μ°λ¦¬λ nginx μμ 컨νΈλ‘€λ¬λ₯Ό μ λ°μ΄νΈνμ¬ μ΄ λ¬Έμ λ₯Ό ν΄κ²°νμ΅λλ€!
λ€λ₯Έ μ€λ λμ λν μ¬λ¬ μ견μ μ½μ ν μ΄ μ μ‘ λ«κΈ° λ¬Έμ λ₯Ό μννκΈ° μν΄ μ μλ κ±°μ λͺ¨λ κ²μ μλνμ΅λλ€. ν΄λΌμ΄μΈνΈ/μλ²(νμ¬ 2.0.3)μμ μ¬μ©νλ λ²μ μλ λΆκ΅¬νκ³ Kubernetesλ₯Ό μ¬μ©νμ¬ λ§μ΄ν¬λ‘μλΉμ€λ₯Ό λ°°ν¬νλ©΄ μ΄ λμμ΄ λ°μν©λλ€.
νμ¬ μλ²μ ꡬμ±μ λ€μκ³Ό κ°μ΅λλ€.
λ€λ₯Έ μ¬λλ€μ΄ μΈκΈνλ―μ΄ λ‘컬μμ μμ© νλ‘κ·Έλ¨μ μ€νν λλ§λ€ μ°κ²°μ΄ λμ΄μ§μ§ μμ΅λλ€. λ€λ₯Έ μ€λ λμμ socket.ioμ λ²μ 3μ΄ ping/pongμ λ³κ²½νμ¬ μλ²μ λν΄ μνλκ³ μ΄κ²μ΄ μ΄ λ¬Έμ λ₯Ό ν΄κ²°νλ λ° λμμ΄ λ μ μλ€λ κ²μ μ½μμ΅λλ€. μ΄ λ¬Έμ λλ μ΄ μ λ²μ μ λν κ°λ₯ν λ μ§μ λν μμμ΄λ μ λ°μ΄νΈκ° μλ μ¬λμ΄ μμ΅λκΉ?
μ€λ λκ° 200ms μ΄μ μμ£Ό μ°¨λ¨λ λ μ΄ μ€λ₯λ₯Ό 보μμ΅λλ€.
μ΄λ° μΌμ΄ μμ£Ό λ°μνλ©΄ socket.io _λ° μ±μλ _ μ’μ§ μμ΅λλ€.
socket.ioμλ μ°κ²°μ ννΈλΉνΈλ₯Ό νμΈνκΈ° μν μκ° μ΄κ³Όκ° μμ΅λλ€.
μ΄ μκ° μ΄κ³Όκ° μ΄κ³Όλλ©΄ μ°κ²°μ΄ μ’ λ£λκ³ μ΄ μ€λ₯κ° λ°μν©λλ€.
Socket.IOλ₯Ό μ¬μ©νμ¬ λ§μ μμ λ°μ΄ν°λ₯Ό 보λ΄λ κ²½μ° μ€λ λλ₯Ό μ°¨λ¨νμ§ μλ λ°©μμΌλ‘ μνν΄μΌ ν©λλ€. λλ μ€λ React Nativeμ μμΌ ν΄λΌμ΄μΈνΈλ₯Ό μ¬μ©νμ¬ μ΄κ²μ λ°κ²¬νμΌλ©° μλ²μ νμΌμ 보λ΄λ λ° μ¬μ©νκ³ μμ΅λλ€. μμΌμ ν΅ν΄ νμΌμ 보λ΄λ λ°©λ²μ μμ±νκΈ° λλ¬Έμ(μμ°¨μ μΌλ‘κ° μλλΌ μΌμ²΄νμ΄λ―λ‘) JS μ€λ λκ° μ§μλμ΄ μλ²μ νμ λ€μ λ³΄λΌ μ μμ΅λλ€. μ€λ₯.
λ΄ μ±μ λμΌν λ¬Έμ κ° μλλ° νν λ¬Έμ κ° μλ κ² κ°μ΅λλ€. μμΌ μ μ‘μ λ«μ μλ² μΈ‘μ λ¬Έμ μμΈμΈμ§ μμ¬λ©λλ€.
κ°μ λ¬Έμ . Angular λΈλΌμ°μ μμ.
μ΄ κ΅¬μ±μ μ¬μ°κ²° νμλ₯Ό μλΉν μ€μμ΅λλ€.
cors λλ¬Έμ forceJSONPλ₯Ό μ¬μ©νμ΅λλ€.
λ΄ λΆμ ν, λλ μλ λ¬Έμ λ₯Ό λ°κ²¬
λ¬Έμ :
μμΌμ λ‘컬μμ μ°κ²° λκΉ μμ΄ μ μλνμ§λ§ νκ²½μ λ°°ν¬ν λ μμΌμ΄ μ°κ²° λκΉ μ΄μ λ‘ "μ μ‘ λ«κΈ°"μ ν¨κ» μ°κ²°μ΄ λκΉλλ€.
upstart μλΉμ€ λλ systemmd μλΉμ€λ₯Ό μ¬μ©νμ¬ λ Έλ μ ν리μΌμ΄μ μ μ€νν λλ§ μ΄ λ¬Έμ λ₯Ό 보μμ΅λλ€. node app.jsμ κ°μ μ ν리μΌμ΄μ μ μ€ννλ©΄ μ΄ λ¬Έμ κ° νμλμ§ μμ΅λλ€.
κ°λ¨ν μμ /ν΄κ²° λ°©λ²:
ν΄λΌμ΄μΈνΈ μΈ‘μμ μμΌ μ°κ²° ν΄μ μ μμΌ λ°©μΆ μ¬μ©μ μΆκ°(κ°λ 11)
self.socket.on('disconnect', (reason) => {
if(currentUser){
self.socket.emit('add user', currentUser);
}
})
μμ μλ리μ€μμ λͺ¨λ μ¬μ©μλ νμ μ°κ²°λμ΄ μκ³ μ¨λΌμΈ μνμ΄λ©° λ‘κ·Έμμνλ©΄ μ°κ²°μ΄ λμ΄μ§λλ€.
κ°μ₯ μ μ©ν λκΈ
Google Cloud Platform(GCP)μ λ°°ν¬ν ν 30μ΄λ§λ€ socket.io μ°κ²°μ΄ λμ΄μ§λ λ¬Έμ κ° λ°μνμ΅λλ€. Global Load Balancerμμ μ¬μ©νλ κΈ°λ³Έ http μκ° μ΄κ³Όλ‘ νλͺ λμμ΅λλ€. GCP λ¬Έμμλ μΉ μμΌμ μ¬μ©ν λ κ°μ λ³κ²½ν΄μΌ νλ€κ³ λμ μμ΅λλ€. μ€μ λ³κ²½ μ§μΉ¨μ λ€μκ³Ό κ°μ΅λλ€.
https://cloud.google.com/load-balancing/docs/backend-service#timeout -μ€μ