μ΄κ²μ΄ μλ €μ§ λ¬Έμ μΈμ§ νμ€νμ§ μμ΅λλ€ (κ²μμ μλνμ§λ§ μ무κ²λ μ°Ύμ§ λͺ»ν¨). Mac μ© Safariλ νμ΄μ§ / νμ μ΄μ μ΄ λ§μ§ μλ κ²½μ° λΉνμ± / μ ν΄λ‘ μΈν΄ μΉ μμΌ μ°κ²°μ μλμΌλ‘ λλ κ²μΌλ‘ 보μ λλ€.
Safari ν / νμ΄μ§μ μ΄μ μ λ§μΆμ§ μμ΅λλ€. websocket μ΄λ²€νΈλ₯Ό κΈ°λ‘ν©λλ€.
μΉ μμΌμ ννΈ λΉνΈ κΈ°λ₯μ ν΅ν΄ μ μ§λμ΄μΌν©λλ€. λ€λ₯Έ λΈλΌμ°μ μμλμ΄ λμμ΄ λ³΄μ΄μ§ μμΌλ―λ‘ λ΄ μ½λκ° μλ κ²μ λλ€.
μ΄κ²μ΄ ννΈ λΉνΈλ₯Ό 무μ / 무μνλ μΌμ’ μ μ μ κΈ°λ₯μΌκΉμ?
DEBUG = *λ‘ μλ²λ₯Ό μ€ννλ©΄ λ€μμ΄ νμλ©λλ€.
socket.io:client client close with reason ping timeout +0ms
socket.io:socket closing socket - reason ping timeout +0ms
λλ Safariκ° μμΌ μλ² λλ ν΄λΌμ΄μΈνΈ μΈμ€ν΄μ€κ° μλλΌ μ°κ²°μ λ«μλ€λ κ²μ μλ―Ένλ€κ³ μκ°ν©λλ€. κ·Έλ¬λ κ°μ₯ μ΄μν μ μ Safari κ° μ½ 30 μ΄μμ 1 λΆ νμ λ€μ μ°κ²°λλ κ²½μ°κ° μμ§λ§ λ€λ₯Έ κ²½μ°μλ νμ΄μ§μ μ΄μ μ λ§μΆ λκΉμ§ μ°κ²°μ΄ λκΈ΄ μνλ‘ μ μ§λλ€λ κ²μ μμμ΅λλ€. μ΄λ¬ν μΌκ΄λμ§ μμ λμμΌλ‘ λλ²κΉ μ μλνκ³ λλ²κΉ νλ κ²μ λ§€μ° μ€λ§ μ€λ½μ΅λλ€.
λλ‘λ ν¨μ¬ λ¦κ² (μ : 10 λΆ) μ°λ°μ μΌλ‘ λ€μ μ°κ²°λλ κ² κ°μ΅λλ€. λ€μ λ§νμ§λ§, λμΌν ν μ€νΈ νκ²½μμ μμ ν μΌμΉνμ§ μμ΅λλ€.
@twistedpixel μ¬ μ°κ²° μ§μ°μ κΈ°ν κΈμμ μ λλ€ (μ¦, 500ms λκΈ°, μ¬ μ°κ²° μλ, 1000ms λκΈ°, μ¬ μ°κ²° μλ ...) ( source ) λμμ μ€λͺ ν μ μμ΅λλ€.
μ°½μ λ€μ μ΄μ μ΄ λ§μΆ°μ§λ©΄ κ°μ λ‘ λ€μ μ°κ²°νλ κ²μ μ΄λ»μ΅λκΉ?
window.addEventListener("focus", () => socket.connect());
https://github.com/primus/primus/issues/348 κ³Ό κ΄λ ¨μ΄μμ μ μμ΅λλ€
μ 보λ₯Ό μ κ³΅ν΄ μ£Όμ μ κ°μ¬ν©λλ€.νμ§λ§ μ£Όμ λ¬Έμ λ μΉ μμΌμ΄ μ¬μ©μκ°μλ λμ μ¬μ©μμκ² κ²½κ³ λ₯Ό 보λ΄λ λ° μ¬μ©λκΈ° λλ¬Έμ μꡬμ μΌλ‘ μ°κ²°λ μΉ μμΌμ΄ νμνλ€λ κ²μ λλ€. λ°λΌμ λ€μ μ°κ²°νκΈ°μν μ°½ ν¬μ»€μ€λ μ΄μμ μ΄μ§ μμ΅λλ€.
μ΄μ¨λ λ΄ μ»΄ν¨ν° / μ€μΉμ μ€μ λ‘ λ λ¬Έμ κ° μλ€κ³ μκ°ν©λλ€. λλ μλ iMacμμ λμμ λ°κ²¬νκΈ° λλ¬Έμ MacBookμ μ λ²μ μ Safariλ‘ μ§μ°κΈ°λ‘ κ²°μ νμ§λ§ μ ν λμμ΄ λ³΄μ΄μ§ μμ΅λλ€. ν루 μ’ μΌ νμ μ΅μν ν μνλ‘ λ μλλ° ν λ²λ μ°κ²°μ΄ λμ΄μ§μ§ μμμ΅λλ€. λ°λΌμ iMacμΌλ‘ λμκ° λͺ¨λ μΈν°λ· νλ¬κ·ΈμΈμ μ κ±°νκ³ λͺ¨λ νμ₯ κΈ°λ₯μ λΉνμ±ννλ €κ³ μλνμ§λ§ μ¬μ νμ΄ λμμ 보μμ΅λλ€.
Appleμ νκ²½ μ€μ λ° νΉμ κΈ°ν νμΌμ μμ νλ κ² μΈμλ Safariλ₯Ό μμ ν μ¬μ€μΉνλ λ°©λ²μ μ 곡νμ§ μλ κ² κ°μ΅λλ€. λλ κΈ°κ³λ₯Ό λ¦μΌμμμ€. λ΄ μΌλΆλ μλ‘ μμνκ³ μΆμ§λ§ λ΄ μμ κ°λ°μλ μμΈμ΄ 무μμΈμ§ λͺ¨λ₯΄λ κ²μ μ«μ΄ν κ²μ λλ€.
μ¬μ€, κΈ°ν κΈμμ μΈ μ¬ μ°κ²°μ λν κ·νμ μμ : νμ€ν 첫 λ²μ§Έ μ¬ μ°κ²°μ μ°κ²° ν΄μ ν μ½ 500msκ° λ κ²μ λλ€. κ·Έλ λ€λ©΄ μλ²κ°μ΄λ₯Ό 무μνλ μ΄μ λ 무μμ λκΉ? μ¬ μ°κ²°μ λ°©ν΄νλ 무μΈκ°κ° μμ΄μΌν©λλ€.
μ°κ²° λκΈ° μ΄λ²€νΈμ socket.connect()
λ₯Ό λΆμ΄λ©΄ λ€μ μ°κ²°λκΈ° λλ¬Έμ μ½κ° μ΄μν©λλ€. λͺ λΆλ§λ€ν΄μΌνμ§λ§ μ¬μ ν μ€ν¨νμ§ μμ΅λλ€. κ·Έλμ μ¬ μ°κ²°μ΄ μΌμ΄λμ§ μλ μ΄μ μ λν΄ μμ ν μμν΄ν©λλ€! μ’ λ νν€μ³ μ κ·Έ μ΄μ λ₯Ό μμλΌ μ μλμ§ μ΄ν΄ λ³΄κ² μ΅λλ€.
μ΄κ²μ λΆννλ μ€λλ λ°μ€ν¬ν±μμλ μΌλ°μ μΈ λΈλΌμ°μ λμμ λλ€.
λ¬΄μ¨ μΌμ΄ μΌμ΄λκ³ μλμ§ μ κ² κ°μμ. μ¬νλ¦¬κ° μ€μ λ‘ λ¬Έμ μ λλ€.
νμ μ΄μ μ΄ λ§μ§ μμ λ λͺ¨λ λΈλΌμ°μ κ° setTimeout λ° setInterval κ°μ 1000μΌλ‘ μ ννλ€κ³ μκ°ν©λλ€. μ¬ν리-μ΄λ¦¬μκ²λ-1000μΌλ‘ μ ν νκ³ κΈ°ν κΈμμ μΌλ‘ μ§μ°μ μΆκ°νλ κ²κ³Ό κ°μ μμ μ μννμ¬ κ° λ°λ³΅μ΄ λ§μ§λ§λ§νΌ λ λ°°κ° κ±Έλ¦½λλ€. μ΄κ²μ΄ μ°κ²°μ΄ λμ΄μ§λ μ΄μ μ λλ€. socket.ioμ λ΄λΆ μκ° μ΄κ³Όκ° μ§μ° / μμ λμ΄ μ¬ μ°κ²°μ΄ νμν μμ μ λ°μνμ§ μλ μ΄μ λ₯Ό μ€λͺ ν©λλ€.
λ°λΌμ κΈ°λ³Έμ μΌλ‘ Appleμ νμμ κ°μ΄ 곑물μ λ°λνμ¬ μ¬μ©μ κ²½νμ μ ν μν€κΈ°λ‘ κ²°μ νμ΅λλ€. μμ¦μ μ λ§ μν΄μ.
λλ κ·Έκ²μ΄ MacBookμ΄ μλ iMacμ μν₯μ λ―ΈμΉλ μ΄μ λ₯Ό λ°κ²¬νμ§ λͺ»νμ§λ§ (μλ°©ν₯μ μμνμ κ²μ λλ€) μ νν μ΄μ λ₯Ό μ νν μ°Ύμ μ μλμ§ κ³μ ν μ€νΈνκ³ λ³Ό κ²μ λλ€.
@twistedpixel κ·Έκ²μ μ¬ν리 λΏλ§μ΄ μλλλ€. http://blog.strml.net/2017/01/chrome-56-now-aggressively-throttles.html μ°Έμ‘°
Primusμμ μ°λ¦¬λ ννΈ λΉνΈ λ©μμ§ (https://github.com/primus/primus/pull/534)μ λ°©ν₯μ λ°κΎΈμ΄ λ¬Έμ λ₯Ό ν΄κ²°νμ΅λλ€.
@lpinca μ΄ λ¬Έμ λ₯Ό μμ λ΄λ €κ³ μ μ°λ λ΄λ΄ μ λ κ·Έκ² κΆκΈνμ΅λλ€. μ 보μ λν΄μ κ°μ¬λ립λλ€! μ λ Primusλ₯Ό μ΄ν΄ 보μμ§λ§ κ·Έλ κ² λΉ¨λ¦¬ μ 체 μ½λλ² μ΄μ€λ₯Ό 리ν©ν λ§ ν νμκ° μμμ΅λλ€. κ·Έλλ λ Έλ ₯ν λ§ν κ°μΉκ°μμ κ² κ°μ΅λλ€.
@twistedpixel λ΄ μμ μ
FWIW, Safari Tech Previewλ μΆκ° μ νμ μν₯μλ°μ§ μλ κ² κ°μ΅λλ€. μλ§λ μ νμ κ·Έλ€μ κ²°μ μ λ€μ§μμ κ²μ λλ€. μ¬μ ν 1000msλ‘ μ‘°μ μ€μ΄μ§λ§ λ μ΄μ μΆκ°νμ§ μλ κ² κ°μ΅λλ€.
iOS 12 Safariμμ λμΌν λ¬Έμ κ° λ°μν©λλ€. λ΄ μ¬ν리λ₯Ό λ€μ μ΄λ©΄ μΉ μμΌ μ°κ²°μ΄ λμ΄μ§λλ€. μμΌμ μ μ§νκΈ°μν κΉ¨λν ν΄κ²° λ°©λ²μ΄ μμ΅λκΉ?
AFAIK iOS Safariλ Safariκ° λ°±κ·ΈλΌμ΄λμμμ λ (λ°°ν°λ¦¬ μλͺ¨λ₯Ό λ°©μ§νκΈ° μν΄) νΉμ νλ‘μΈμ€λ₯Ό μΌμ μ€λ¨νκ³ μΉ μμΌ μ°κ²°μ κ±°μ νμ€ν κ·Έλ¬ν νλ‘μΈμ€ μ€ νλμ λλ€. λͺ¨λ°μΌ μ₯μΉμμ ν΄κ²° λ°©λ²μ μ°Ύμ κ°λ₯μ±μ κ±°μ μμ΅λλ€.
νμΈ. νμ§λ§ onwindowfocus κ°μ μ΄λ²€νΈ 리μ€λλ₯Ό μΆκ°ν΄λ λ€μ μ°κ²°ν μ μμ΅λκΉ?
ν΄κ²° λ°©λ²μ ꡬν ν μ¬λμ΄ μμ΅λκΉ? μ°λ¦¬λ μ΅μ μ μ΄ν΄λ³΄κ³ λ€λ₯Έ μ¬λλ€μ΄ μ΄λ―Έ μ€ννκ³ μλμ§ κΆκΈν©λλ€.
ν¬μ»€μ€ μ΄λ²€νΈλ₯Ό μ¬μ©νλ λμ Page Visibility API λ₯Ό μ¬μ©νμ¬ λͺ¨λ°μΌ μ± μ°½μ΄ λ°±κ·ΈλΌμ΄λλ‘ νμλλμκΈ°λ₯Ό κ°μ§ν΄μΌν©λλ€.
λλ Azure SignalRμ λ¬Έμ μ λΆλͺ νκ³ νμ¬ νμ΄μ§ κ°μμ± APIλ₯Ό μ¬μ©νμ¬ νμ΄μ§ μ¨κΈ°κΈ°μμ μ°κ²°μ λ«κ³ νμ΄μ§κ° νμ λ λ λ€μ μ°κ²°νλ
μ΄ μΈ κ°μ§ λΈλΌμ°μ λͺ¨λμμ pingTimeout
& pingInterval
κ°μ λ³κ²½νμ¬ λͺ μκ° λμ ν
μ€νΈνμ΅λλ€. λ΄κ° μ°Ύμ ν΄κ²°μ±
:
pingTimeout
> = 30000
ms μ€μ pingInterval
<= 10000
ms μ€μ pingTimeout = 30000
λ³κ²½νλ κ²μ΄ κ°μ₯ μ’μ μ루μ
μ΄λΌκ³ μκ°ν©λλ€. κΈ°λ³Έ pingInterval
λ 25000
msμ΄λ©° ν΄λΌμ΄μΈνΈλ₯Ό 10 μ΄λ§λ€ ννλ μλ²μ λΉλλ₯Ό λ리λ κ²μ _at scale_ νλ‘μ νΈμ λν΄ λ무 μλ€ μ€λ¬μΈ μ μμ΅λλ€.
λλ socket.ioμ νμ¬ λ²μ μ΄ ν΄λΌμ΄μΈνΈ μΈ‘μ setTimeoutμ μμ‘΄νκΈ° λλ¬Έμ μμλ§νΌ μ λ’°ν μ μμ μ μλ€κ³ μκ°ν©λλ€.
μ΄λ μ£Όμ λ³κ²½ μ¬νμ΄λ―λ‘ v3μ ν¬ν¨ ν κ²μ λλ€.
@darrachequesne λλ λν ν΄λ μ ν νλ©΄μ΄ λκΈ° μνλ‘ μ νλκ³ λͺ¨λ°μΌμμ λΈλΌμ°μ λ₯Ό λ€μ μ΄λ©΄ μμΌ ioκ° μ±ν μ°κ²°μ λμ΅λλ€. plzμ΄ λ¬Έμ λ₯Ό ν΄κ²°ν©λλ€. κ·Έκ²μ ν° μλκ°μ΄ λ κ²μ λλ€.
μμΌ ioμμ΄ λ²κ·Έμ λν μ λ°μ΄νΈκ° μμ΅λκΉ?
λ΄ μ±μμ μ¬μ©μκ° λͺ¨λ°μΌ λΈλΌμ°μ μμ νμΌμ μ λ‘λνλ €κ³ ν λ μ λ‘λ λν μμκ° μ΄λ¦¬λ©΄ socket ioκ° νμΌμ μ ννλ λ° 15 μ΄ μ΄μ 걸리면 μ°κ²°μ λμ΅λλ€.
κ·Έλ€μ΄ λ€λ₯Έ νμ΄μ§ λλ νμΌλ‘ μ ννλ©΄ 15 μ΄ νμ μμΌ ioκ° λ€μ μ°κ²°μ λμ΅λλ€. μ΄μ¨λ μ΄ λ¬Έμ λ₯Ό ν΄κ²°νκ³ μ¬μ©μκ° νμ΄μ§ / λ¬Έμμ μ΄μ μ λ§μΆμ§ μλλΌλ μμΌ ioλ₯Ό νμ± / μ°κ²°λ μνλ‘ μ μ§ν μ μμ΅λκΉ?
μλ νμΈμ.
Visibility APIλ‘μ΄ λ¬Έμ λ₯Ό ν΄κ²°νμ΅λλ€.
λλ₯Ό μν΄ Safariμ μ£Όμ λ¬Έμ -visible.hidden === trueμμ μμΌμ λ«μ μκ°μ΄ μμΌλ―λ‘ μ₯μΉκ° μ κΈ ν΄μ λ ν websocketμ λ«κ³ λ€μ μμν΄μΌν©λλ€.
@ JustFly1984 κ·Έκ²μ λν μν μ½λκ°
μ΄μ μ΄κ²μ MacOS Safariμμλ λ°μν©λλ€.
@calendee @anilanar μ°λ¦¬λ sockets.ioλ₯Ό μ¬μ©νμ§ μκ³ μμν μΉ μμΌμ μ¬μ©νκ³ React.jsλ₯Ό μ¬μ©νλ―λ‘ μ½λκ° λ§€μ° λ³΅μ‘ν©λλ€. κ° APIμ λν΄ λ κ°μ <ContextProvider />
κ° μκ³ , κ°μμ±μ μλ¨μ, μΉ μμΌμ νλ¨μ, μΉ μμΌμ κ°μμ±μμ 컨ν
μ€νΈλ₯Ό μ¬μ©νλ€λ μ£Όμ μμ΄λμ΄μ
λλ€.
μ μκ² μ°λ½ν΄ μ£Όμ μ κ°μ¬ν©λλ€ JustFly1984. μ¬μ€ κ²°κ΅μλ κ°μμ± APIκ° νμνμ§ μμμ΅λλ€. νμ μμμ μΆκ°νκΈ° λ§νλ©΄λ©λλ€. μ΄λ κ² ν νμλ λ μ΄μ iOS Safariμμ μ°κ²° λ¬Έμ κ° μμμ΅λλ€.
// Establish a Socket.io connection
// Initialize our Feathers client application through Socket.io
// with hooks and authentication.
client.configure(feathers.socketio(socket), {
timeout: 2000,
});
// Use localStorage to store our login token
client.configure(feathers.authentication(), {
timeout: 2000,
});
κ°μ₯ μ μ©ν λκΈ
λλ socket.ioμ νμ¬ λ²μ μ΄ ν΄λΌμ΄μΈνΈ μΈ‘μ setTimeoutμ μμ‘΄νκΈ° λλ¬Έμ μμλ§νΌ μ λ’°ν μ μμ μ μλ€κ³ μκ°ν©λλ€.
μ΄λ μ£Όμ λ³κ²½ μ¬νμ΄λ―λ‘ v3μ ν¬ν¨ ν κ²μ λλ€.
κ΄λ ¨ : https://github.com/primus/primus/issues/348