Socket.io: μ„œλ²„κ°€ socket.disconnect( true )λ₯Ό μˆ˜ν–‰ν•œ ν›„ ν΄λΌμ΄μ–ΈνŠΈκ°€ λ‹€μ‹œ μ—°κ²°ν•˜λŠ” μ˜¬λ°”λ₯Έ 방법

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

μ„œλ²„ : λ…Έλ“œ + socket.io

var io = require( 'socket.io' )( 3000 );

io.on( 'connection', function ( socket ) ...

// at some point if client auth fails, server may kick him out:

socket.disconnect( true );

ν΄λΌμ΄μ–ΈνŠΈ : html/js + socket.io 1.4.5

socket = io.connect( 'http://127.0.0.1:3000', {
    reconnection: true,
    reconnectionDelay: 1000,
    reconnectionDelayMax : 5000,
    reconnectionAttempts: 99999
} );

socket.on( 'connect', function () {
    console.log( 'connected to server' );
} );

socket.on( 'disconnect', function () {
    console.log( 'disconnected to server' );
} );

μœ„μ˜ λ‚΄μš©μ€ κ°„λ‹¨ν•˜μ§€λ§Œ 이것이 κΈ°μ΄ˆμž…λ‹ˆλ‹€. μ„œλ²„κ°€ λ‹€μš΄λ˜μ—ˆμ„ λ•Œ ν΄λΌμ΄μ–ΈνŠΈλ₯Ό μ‹€ν–‰ν•˜λ©΄ μž¬μ—°κ²°μ΄ μ œλŒ€λ‘œ μž‘λ™ν•©λ‹ˆλ‹€. ν΄λΌμ΄μ–ΈνŠΈκ°€ μ„œλ²„μ— 연결을 μ‹œλ„ν•˜κ³  λ§ˆμΉ¨λ‚΄ μ„œλ²„λ₯Ό μ‹œμž‘ν•˜λ©΄ 연결이 μ„€μ •λ©λ‹ˆλ‹€.

μ–΄λŠ μ‹œμ μ—μ„œ μ„œλ²„κ°€ ν΄λΌμ΄μ–ΈνŠΈμ˜ 연결을 끊기둜 κ²°μ •ν•˜λŠ” κ²½μš°κ°€ λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€. 주둜 κ·Έκ°€ λ‘œκ·Έμ•„μ›ƒν•˜μ—¬ 토큰을 λ¬΄νš¨ν™”ν•˜κ³  db에 λŒ€ν•œ 쿼리가 κ·Έλ ‡κ²Œ ν•˜λ„λ‘ μ§€μ‹œν•˜κ±°λ‚˜ 인증 토큰이 λ§Œλ£Œλ˜μ—ˆκ±°λ‚˜ 무엇이든 λ§ˆμ°¬κ°€μ§€μ΄κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€.

이 μƒν™©μ—μ„œλŠ” μ‚¬μš©μžκ°€ λ‹€μ‹œ λ‘œκ·ΈμΈν•˜κΈ°λ₯Ό 원할 수 있고 μ„œλ²„μ— λ‹€μ‹œ μ—°κ²°ν•  수 μžˆλŠ” κΆŒν•œμ΄ 있기 λ•Œλ¬Έμ— ν΄λΌμ΄μ–ΈνŠΈμ—μ„œ μ„œλ²„ 폴링을 λ³΅μ›ν•˜κ³  μ‹ΆμŠ΅λ‹ˆλ‹€.

λΈŒλΌμš°μ €μ—μ„œ νŽ˜μ΄μ§€(ν΄λΌμ΄μ–ΈνŠΈ)λ₯Ό μƒˆλ‘œ 고치면 μ œλŒ€λ‘œ μž‘λ™ν•˜μ§€λ§Œ μΆ”ν•œ μ†”λ£¨μ…˜μž…λ‹ˆλ‹€.

원인은 disconnect()λ₯Ό μˆ˜ν–‰ν•œ ν›„ "Manager.skipReconnect" 속성이 true둜 μ„€μ •λ˜μ—ˆκΈ° λ•Œλ¬Έμ— μ„œλ²„κ°€ ν΄λΌμ΄μ–ΈνŠΈμ˜ 연결을 λŠμ€ ν›„ ν΄λΌμ΄μ–ΈνŠΈμ—μ„œ μž¬μ—°κ²° 폴링을 λ‹€μ‹œ μ‹œμž‘ν•˜λŠ” μ μ ˆν•œ 방법이 무엇인지 묻고 μžˆμŠ΅λ‹ˆλ‹€.

이것에 λŒ€ν•œ stackoverflow에 λŒ€ν•œ λͺ‡ 가지 닡변을 μ°Ύμ•˜μ§€λ§Œ λͺ¨λ‘ μ‹€νŒ¨ν–ˆμŠ΅λ‹ˆλ‹€. λͺ¨λ“  것은 ν΄λΌμ΄μ–ΈνŠΈμ—μ„œ μ‹€ν–‰λ©λ‹ˆλ‹€.

  • socket.io.reconnect();
  • socket.socket.reconnect(); // ??
  • socket = io.connect( ' http://127.0.0.1 :3000', ... // μ—°κ²° μŠ€λ‹ˆνŽ«μ„ λ‹€μ‹œ ν˜ΈμΆœν•˜λŠ” 것은 쒋지 μ•Šμ€ 생각인 것 κ°™μŠ΅λ‹ˆλ‹€.

이 λ¬Έμ œμ— λŒ€ν•΄ μ €λ₯Ό λ„μ™€μ£Όμ‹œκ² μŠ΅λ‹ˆκΉŒ?

κ°μ‚¬ν•©λ‹ˆλ‹€

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

μ§€κΈˆμ€ 이 λ°©λ²•μœΌλ‘œ κ΄€λ¦¬ν–ˆμœΌλ©° μ•ˆμ •μ μΈ 것 κ°™μŠ΅λ‹ˆλ‹€.

ν΄λΌμ΄μ–ΈνŠΈ :

var app = {
...
socket: null,
connect: function() {
  var self = this;
  if( self.socket ) {
    self.socket.destroy();
    delete self.socket;
    self.socket = null;
  }
  this.socket = io.connect( 'http://127.0.0.1:3000', {
    reconnection: true,
    reconnectionDelay: 1000,
    reconnectionDelayMax : 5000,
    reconnectionAttempts: Infinity
  } );
  this.socket.on( 'connect', function () {
    console.log( 'connected to server' );
  } );
  this.socket.on( 'disconnect', function () {
    console.log( 'disconnected from server' );
    window.setTimeout( 'app.connect()', 5000 );
  } );
}
...
} // var app

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

μ§€κΈˆμ€ 이 λ°©λ²•μœΌλ‘œ κ΄€λ¦¬ν–ˆμœΌλ©° μ•ˆμ •μ μΈ 것 κ°™μŠ΅λ‹ˆλ‹€.

ν΄λΌμ΄μ–ΈνŠΈ :

var app = {
...
socket: null,
connect: function() {
  var self = this;
  if( self.socket ) {
    self.socket.destroy();
    delete self.socket;
    self.socket = null;
  }
  this.socket = io.connect( 'http://127.0.0.1:3000', {
    reconnection: true,
    reconnectionDelay: 1000,
    reconnectionDelayMax : 5000,
    reconnectionAttempts: Infinity
  } );
  this.socket.on( 'connect', function () {
    console.log( 'connected to server' );
  } );
  this.socket.on( 'disconnect', function () {
    console.log( 'disconnected from server' );
    window.setTimeout( 'app.connect()', 5000 );
  } );
}
...
} // var app

μœ μ‚¬ν•œ μ ‘κ·Ό 방식 μ‚¬μš©:

  this.socket = io.connect( 'ws://127.0.0.1:3000', {
    reconnection: true,
    reconnectionDelay: 1000,
    reconnectionDelayMax : 5000,
    reconnectionAttempts: Infinity
  } );

λΆˆν–‰νžˆλ„ 이둜 인해 μ†ŒμΌ“μ΄ μ›Ή μ†ŒμΌ“μ΄ μ•„λ‹Œ http ν”„λ‘œν† μ½œμ„ μ‚¬μš©ν•˜κ²Œ λ©λ‹ˆλ‹€.

지속적인 μ›Ή μ†ŒμΌ“ 연결을 μœ„ν•œ 쒋은 μ ‘κ·Ό 방식을 μ—¬μ „νžˆ μ°Ύκ³  μžˆμŠ΅λ‹ˆλ‹€.

λ‚΄κ°€ λ­”κ°€λ₯Ό λ†“μΉœ κ±΄κ°€μš”???

λ˜ν•œ 이에 λŒ€ν•œ μ†”λ£¨μ…˜μ— 관심이 μžˆμŠ΅λ‹ˆλ‹€.

socket.connect()
버전 1.5.1μ—μ„œ λ‚˜λ₯Ό μœ„ν•΄ μΌν–ˆμŠ΅λ‹ˆλ‹€. 도움이 되기λ₯Ό λ°”λžλ‹ˆλ‹€.

@sconway 우리λ₯Ό 깨우쳐 μ£Όμ‹€ 수 μžˆμŠ΅λ‹ˆκΉŒ? μ–΄λ–€ μ½”λ“œκ°€ 될 수 μžˆμŠ΅λ‹ˆκΉŒ?

μ•ˆλ…•ν•˜μ„Έμš”,

같은 질문이 μžˆμ—ˆμ§€λ§Œ ν˜„μž¬ ν…ŒμŠ€νŠΈ 쀑인 이 μ†”λ£¨μ…˜μ΄ κ°•λ ₯ν•œ μ†”λ£¨μ…˜μ΄κ±°λ‚˜ κ°•λ ₯ν•œ ν•΄κ²° 방법인 κ²ƒμœΌλ‘œ λ³΄μž…λ‹ˆλ‹€... (λ‘˜ λ‹€ 제곡됨)

http://stackoverflow.com/questions/10437584/socket-io-reconnect

socket.io μžμ²΄μ—μ„œ 이 문제λ₯Ό ν•΄κ²°ν•  수 μžˆμŠ΅λ‹ˆκΉŒ?

버전 2.0.3으둜 μ—…κ·Έλ ˆμ΄λ“œν–ˆκ³  κΈ°λ³Έ μžλ™ μž¬μ—°κ²° 섀정이 μž‘λ™ν–ˆμ§€λ§Œ μ—¬κΈ°μ—λŠ” λ¬Έμ œκ°€ μ—†μŠ΅λ‹ˆλ‹€.

μ„œλ²„ λ˜λŠ” ν΄λΌμ΄μ–ΈνŠΈκ°€ disconnect() λ©”μ†Œλ“œλ₯Ό ν˜ΈμΆœν•˜λŠ”μ§€ 여뢀에 관계없이 ν΄λΌμ΄μ–ΈνŠΈκ°€ μ†ŒμΌ“μ„ νŒŒκ΄΄ν•˜λ©΄ λͺ¨λ“  이벀트 ν•Έλ“€λŸ¬κ°€ μ‚­μ œλ˜κ³  κ΄€λ¦¬μžλŠ” μ—°κ²° λ°°μ—΄μ—μ„œ 이λ₯Ό μ œκ±°ν•©λ‹ˆλ‹€. λ‹€λ₯Έ 이유둜 연결이 끊긴 κ²½μš°μ—λŠ” λ°œμƒν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
ν›Œλ₯­ν•œ ν•΄κ²° 방법은 이유 λ§€κ°œλ³€μˆ˜λ₯Ό 읽을 수 μžˆμŠ΅λ‹ˆλ‹€.
.on('disconnect', reason => { if(reason === 'io server disconnect') { //you should renew token or do another important things before reconnecting socket.connect(); } });
λ˜λŠ” μ†ŒμΌ“μ΄ μ—¬μ „νžˆ κ΄€λ¦¬μžμ˜ μ—°κ²° λͺ©λ‘μ— μžˆλŠ”μ§€ ν™•μΈν•˜λŠ” 것이 훨씬 μ’‹μŠ΅λ‹ˆλ‹€.
.on('disconnect', () => { if(socket.io.connecting.indexOf(socket) === -1){ //you should renew token or do another important things before reconnecting socket.connect(); } })

@DrLightman 처럼

var WebSocketServer = {
    isConnected: false,
    socket: null,
    interval: null,
    connect() {
        if (this.socket) {
            this.socket.destroy();
            delete this.socket;
            this.socket = null;
        }
        this.socket = io.connect('http://localhost:9010', {
            reconnection: false
        });
        this.socket.on('connect', () => {
            this.isConnected = true;
            this.socket.emit('authentication', { user_id: 2751, token: "abc" });
            this.socket.on('authenticated', function() {

            });
        });

        this.socket.on('disconnect', () => {
            this.isConnected = false;
            this.interval = window.setInterval(() => {
                if (this.isConnected) {
                    clearInterval(this.interval);
                    this.interval = null;
                    return;
                }
                WebSocketServer.connect()
            }, 5000);
        });

        return this.socket;
    }
}

var socket = WebSocketServer.connect();

@DrLightman 이것이 λ‚΄κ°€ μˆ˜ν–‰ν•˜λŠ” 방법이며 λΈŒλΌμš°μ € λ˜λŠ” Android/IOS μ•±μ—μ„œ μ™„λ²½ν•˜κ²Œ μž‘λ™ν•©λ‹ˆλ‹€.
var io= new socketio.connect('http://192.168.43.79:3000',{'forceNew':true});

@pablodgonzalez λ™μΌν•œ 질문이 μžˆμŠ΅λ‹ˆλ‹€. κ·€ν•˜μ˜ μ†”λ£¨μ…˜μ΄ μž‘λ™ ν–ˆμŠ΅λ‹ˆκΉŒ?

@programmerCs κ·Έλ ‡μŠ΅λ‹ˆλ‹€. κ°μ§€λœ 문제 없이 생산 μ€‘μž…λ‹ˆλ‹€.

이 문제둜 λ§Žμ€ λ¬Έμ œκ°€ ν•΄κ²°λ˜μ—ˆμŠ΅λ‹ˆλ‹€.
λͺ¨λ‘ κ°μ‚¬ν•©λ‹ˆλ‹€

μ„œλ²„μ— μ—°κ²°λ˜μ–΄ μžˆλŠ” λ™μ•ˆ λ§Œλ£Œλ˜μ—ˆκΈ° λ•Œλ¬Έμ— ν΄λΌμ΄μ–ΈνŠΈκ°€ 토큰을 μƒˆλ‘œ κ³ μΉ˜λ„λ‘ ν•  λ•Œλ„ λ™μΌν•œ λ¬Έμ œκ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€.

λŒ€μ‹  ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ 이벀트λ₯Ό λ³΄λ‚΄μ„œ 토큰을 μƒˆλ‘œ κ³ μΉ˜λ„λ‘ μš”μ²­ν–ˆμŠ΅λ‹ˆλ‹€. μ΄λ ‡κ²Œ ν•˜λ©΄ μ†ŒμΌ“μ΄ λ‹«νžˆμ§€ μ•ŠμœΌλ―€λ‘œ 문제λ₯Ό ν”Όν•˜κ³  잘 μž‘λ™ν•©λ‹ˆλ‹€!

...이제 그것을 생산에 νˆ¬μž…ν•  μ‹œκ°„μž…λ‹ˆλ‹€! :식은땀: :λ―Έμ†Œ:

κ°€μž₯ κ°„λ‹¨ν•œ 해결책은 이미 ν„°μ—μ„œ 'μ—°κ²° ν•΄μ œ' 이벀트λ₯Ό μˆ˜μ‹ ν•˜κ³  setTimeout() ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜λŠ” 것 κ°™μ§€λ§Œ μ„œλ²„μ—μ„œ 연결이 끊긴 λ™μ•ˆ ν΄λΌμ΄μ–ΈνŠΈκ°€ 생성할 수 μžˆλŠ” μ΄λ²€νŠΈλŠ” μ–΄λ–»μŠ΅λ‹ˆκΉŒ? ν΄λΌμ΄μ–ΈνŠΈμ—μ„œ λ°©μΆœμ„ λΈŒλ‘œλ“œμΊμŠ€νŠΈν•˜κΈ° 전에 연결이 μ„€μ •λ˜μ—ˆλŠ”μ§€ 항상 μΆ”κ°€ 확인을 μ‹€ν–‰ν•΄μ•Ό ν•˜λŠ” 것 κ°™μŠ΅λ‹ˆλ‹€.

@qassa λ°©μΆœμ— λŒ€ν•œ 확인이 ν•„μš”ν•œ 경우 콜백 λ§€κ°œλ³€μˆ˜λ₯Ό μ‚¬μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€. λŒ€μ‹  이벀트의 μˆ˜μ‹ μ„ 보μž₯ν•΄μ•Ό ν•˜λŠ” 경우 socket.ioλ₯Ό μ‚¬μš©ν•˜μ§€ 말고 λͺ¨κΈ°/mqtt와 같은 일뢀 λŒ€κΈ°μ—΄ 라이브러리/ν”„λ‘œν† μ½œμ„ μ‚¬μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€.
setTimeout은 μ˜΅μ…˜μ΄μ§€λ§Œ 연결이 끊긴 μ†ŒμΌ“(μ„œλ²„ λ˜λŠ” ν΄λΌμ΄μ–ΈνŠΈμ— μ˜ν•΄)은 곧 μ†Œλ©Έλ˜λŠ” μ†ŒμΌ“μž…λ‹ˆλ‹€. λ”°λΌμ„œ 쉽고 λΉ λ₯Έ μž¬μ—°κ²°μ„ 보μž₯ν•΄μ•Ό ν•˜λŠ” 경우 아직 μ†ŒμΌ“ 개체 μΈμŠ€ν„΄μŠ€κ°€ 있고 connect()λ₯Ό ν˜ΈμΆœν•  수 μžˆλŠ” 경우 setTimeout을 μ‚¬μš©ν•˜λŠ” μ΄μœ λŠ” λ¬΄μ—‡μž…λ‹ˆκΉŒ?

ν”„λ‘œμ νŠΈμ˜ λˆ„κ΅°κ°€κ°€ 이것을 λ¬Έμ„œν™”ν•΄μ•Ό ν•©λ‹ˆλ‹€...

Lemm이 이것을 λ˜‘λ°”λ‘œ μ΄ν•΄ν•©λ‹ˆλ‹€. μ„œλ²„κ°€ νŠΉμ • 이유둜 λ˜λŠ” λ„€νŠΈμ›Œν¬ μ—°κ²° μ†μ‹€λ‘œ 인해 ν΄λΌμ΄μ–ΈνŠΈ 연결을 λŠμŠ΅λ‹ˆκΉŒ? λ„€νŠΈμ›Œν¬λ§Œ μžˆλ‹€λ©΄ Socketio(client)λŠ” λ¬΄ν•œμ • μž¬μ—°κ²°μ„ μ‹œλ„ν•  κ²ƒμž…λ‹ˆλ‹€! , io=new socketio(β€˜http://yourserver.com’, {'forceNew':true}); 와 같이 κ΅¬μ„±ν•˜λ©΄ μ—¬μ „νžˆ λ‹€μ‹œ μ—°κ²°λ˜μ§€λ§Œ λ¦¬μŠ€λ„ˆλ₯Ό μ„œλ²„μ™€μ˜ μ—°κ²° ν•΄μ œμ— λ„£μœΌλ©΄ ν΄λΌμ΄μ–ΈνŠΈμ—μ„œ io.disconnect() λ₯Ό ν˜ΈμΆœν•˜κΈ°

보낸 μ‚¬λžŒ: CxRes [mailto:[email protected]]
보낸 λ‚ μ§œ: 2018λ…„ 2μ›” 1일 μ˜€ν›„ 9μ‹œ 50λΆ„
λ°›λŠ” μ‚¬λžŒ: socketio/socket.io [email protected]
μ°Έμ‘°: devyaz [email protected] ; λŒ“κΈ€ [email protected]
제λͺ©: Re: [socketio/socket.io] μ„œλ²„κ°€ socket.disconnect( true )λ₯Ό μˆ˜ν–‰ν•œ ν›„ ν΄λΌμ΄μ–ΈνŠΈκ°€ λ‹€μ‹œ μ—°κ²°ν•˜λŠ” μ˜¬λ°”λ₯Έ 방법 (#2476)

ν”„λ‘œμ νŠΈμ˜ λˆ„κ΅°κ°€κ°€ 이것을 λ¬Έμ„œν™”ν•΄μ•Ό ν•©λ‹ˆλ‹€...

β€”
당신이 λŒ“κΈ€μ„ λ‹¬μ•˜κΈ° λ•Œλ¬Έμ— 이것을 λ°›λŠ” κ²ƒμž…λ‹ˆλ‹€.
이 이메일에 직접 λ‹΅μž₯ν•˜κ±°λ‚˜ GitHub https://github.com/socketio/socket.io/issues/2476#issuecomment-362381171 μ—μ„œ ν™•μΈν•˜κ±°λ‚˜ μŠ€λ ˆλ“œ https://github.com/notifications/unsubscribe-auth/λ₯Ό μŒμ†Œκ±° https://github.com/notifications/beacon/ATfQSYqwkgtrHZk9FASNZUl69ps9ZYYCks5tQhVQgaJpZM4HsVs7.gif

@devyaz μ‚¬λž‘ν•΄μš”

μ„€λͺ…μ„œλŠ” @pablodgonzalez 의 λ‹΅λ³€μœΌλ‘œ μ—…λ°μ΄νŠΈλ˜μ—ˆμŠ΅λ‹ˆλ‹€. https://github.com/socketio/socket.io-client/commit/afb952d854e1d8728ce07b7c3a9f0dee2a61ef4e

정말 κ°μ‚¬ν•©λ‹ˆλ‹€!

0.8.3 λ²„μ „μ˜ io.socket을 μ‚¬μš©ν•˜μ—¬ μƒˆ 버전 1.0.0을 μ œκ±°ν•˜μ‹­μ‹œμ˜€.

compile('io.socket:socket.io-client:0.8.3') {
    exclude group: 'org.json', module: 'json'
}

μœ μ‚¬ν•œ μ ‘κ·Ό 방식 μ‚¬μš©:

  this.socket = io.connect( 'ws://127.0.0.1:3000', {
    reconnection: true,
    reconnectionDelay: 1000,
    reconnectionDelayMax : 5000,
    reconnectionAttempts: Infinity
  } );

λΆˆν–‰νžˆλ„ 이둜 인해 μ†ŒμΌ“μ΄ μ›Ή μ†ŒμΌ“μ΄ μ•„λ‹Œ http ν”„λ‘œν† μ½œμ„ μ‚¬μš©ν•˜κ²Œ λ©λ‹ˆλ‹€.

지속적인 μ›Ή μ†ŒμΌ“ 연결을 μœ„ν•œ 쒋은 μ ‘κ·Ό 방식을 μ—¬μ „νžˆ μ°Ύκ³  μžˆμŠ΅λ‹ˆλ‹€.

λ‚΄κ°€ λ­”κ°€λ₯Ό λ†“μΉœ κ±΄κ°€μš”???

μ‚¬μš© wss://

μœ μ‚¬ν•œ μ ‘κ·Ό 방식 μ‚¬μš©:

  this.socket = io.connect( 'ws://127.0.0.1:3000', {
    reconnection: true,
    reconnectionDelay: 1000,
    reconnectionDelayMax : 5000,
    reconnectionAttempts: Infinity
  } );

λΆˆν–‰νžˆλ„ 이둜 인해 μ†ŒμΌ“μ΄ μ›Ή μ†ŒμΌ“μ΄ μ•„λ‹Œ http ν”„λ‘œν† μ½œμ„ μ‚¬μš©ν•˜κ²Œ λ©λ‹ˆλ‹€.
지속적인 μ›Ή μ†ŒμΌ“ 연결을 μœ„ν•œ 쒋은 μ ‘κ·Ό 방식을 μ—¬μ „νžˆ μ°Ύκ³  μžˆμŠ΅λ‹ˆλ‹€.
λ‚΄κ°€ λ­”κ°€λ₯Ό λ†“μΉœ κ±΄κ°€μš”???

μ‚¬μš© wss://

μ•ˆλ…•ν•˜μ„Έμš”, bro.howλŠ” wss.it을 μ‚¬μš©ν•˜λŠ” 경우 영ꡬ μ›Ή μ†ŒμΌ“ μ—°κ²°λ‘œ μž‘λ™ν•˜λŠ” 경우 ν΄λ§ν•˜μ§€ μ•Šκ³  wssλ₯Ό μœ μ§€ν•˜κ³  λΉ λ₯Έ μž¬μ—°κ²°μ— λŒ€ν•΄ λ™μΌν•œ μ§ˆλ¬Έμ„ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μ„œλ²„ λ˜λŠ” ν΄λΌμ΄μ–ΈνŠΈκ°€ disconnect() λ©”μ†Œλ“œλ₯Ό ν˜ΈμΆœν•˜λŠ”μ§€ 여뢀에 관계없이 ν΄λΌμ΄μ–ΈνŠΈκ°€ μ†ŒμΌ“μ„ νŒŒκ΄΄ν•˜λ©΄ λͺ¨λ“  이벀트 ν•Έλ“€λŸ¬κ°€ μ‚­μ œλ˜κ³  κ΄€λ¦¬μžλŠ” μ—°κ²° λ°°μ—΄μ—μ„œ 이λ₯Ό μ œκ±°ν•©λ‹ˆλ‹€. λ‹€λ₯Έ 이유둜 연결이 끊긴 κ²½μš°μ—λŠ” λ°œμƒν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
ν›Œλ₯­ν•œ ν•΄κ²° 방법은 이유 λ§€κ°œλ³€μˆ˜λ₯Ό 읽을 수 μžˆμŠ΅λ‹ˆλ‹€.

.on('disconnect', reason => { 
  if(reason === 'io server disconnect') {
    //you should renew token or do another important things before reconnecting
    socket.connect();
  }
});

λ˜λŠ” μ†ŒμΌ“μ΄ μ—¬μ „νžˆ κ΄€λ¦¬μžμ˜ μ—°κ²° λͺ©λ‘μ— μžˆλŠ”μ§€ ν™•μΈν•˜λŠ” 것이 훨씬 μ’‹μŠ΅λ‹ˆλ‹€.

.on('disconnect',  () => {
  if(socket.io.connecting.indexOf(socket) === -1){
    //you should renew token or do another important things before reconnecting
    socket.connect();
  }
})

μ†ŒμΌ“μ΄ μ—¬μ „νžˆ κ΄€λ¦¬μžμ˜ μ—°κ²° λͺ©λ‘μ— μžˆλŠ”μ§€ ν™•μΈν•˜λŠ” 것이 더 λ‚˜μ€ 이유λ₯Ό μ„€λͺ…ν•  수 μžˆμŠ΅λ‹ˆκΉŒ? μ—…λ°μ΄νŠΈλœ λ¬Έμ„œλŠ” μ—°κ²° ν•΄μ œ 이유λ₯Ό ν™•μΈν•˜λŠ” 첫 번째 μ†”λ£¨μ…˜λ§Œ μ‚¬μš©ν–ˆμŠ΅λ‹ˆλ‹€. 감사 ν•΄μš”.

@emclab μ•ˆλ…•ν•˜μ„Έμš”. μ΅œμ‹  λ²„μ „μ—μ„œ κ°œλ°œμžκ°€ μƒˆλ‘œμš΄ 이유λ₯Ό μΆ”κ°€ν•˜κ³  κ·€ν•˜μ˜ 경우 "이유"κ°€ μ€‘μš”ν•˜μ§€ μ•Šμ€ 경우 μ—°κ²° λͺ©λ‘μ—μ„œ μ†ŒμΌ“μ„ κ²€μƒ‰ν•˜κΈ°λ§Œ ν•˜λ©΄ λ©λ‹ˆλ‹€. μ—†μœΌλ©΄ μˆ˜λ™μœΌλ‘œ λ‹€μ‹œ μ—°κ²°ν•΄μ•Ό ν•©λ‹ˆλ‹€.
μ–΄λ–€ κ²½μš°μ—λŠ” 이유λ₯Ό μ•„λŠ” 것이 μ€‘μš”ν•˜κ³  더 κ°•λ ₯ν•œ κ²½μš°μ— 따라 읽고 ν–‰λ™ν•˜μ§€λ§Œ μ•„λ§ˆλ„ κ°€μž₯ μΌλ°˜μ μ΄μ§€ μ•Šμ„ 수 μžˆμŠ΅λ‹ˆλ‹€.
λ©΄μ±… μ‘°ν•­: 두 번째 방법을 μ„ νƒν•˜λ©΄ μ΅œμ‹  λ²„μ „μ—μ„œ λ¦¬νŒ©ν„°λ§μ΄λ‚˜ λ©”μ»€λ‹ˆμ¦˜μ˜ 일뢀 변경이 μ•ˆμ „ν•˜μ§€ μ•ŠμœΌλ―€λ‘œ 훨씬 μ’‹μ§€λŠ” μ•Šμ§€λ§Œ 훨씬 κ°„λ‹¨ν•©λ‹ˆλ‹€.
λ¬Έμ•ˆ 인사!

이온 μ‘μš© ν”„λ‘œκ·Έλž¨μ— μ†ŒμΌ“ 연결을 λŠμ„ 수 μ—†μŠ΅λ‹ˆλ‹€. κ³΅κΈ‰μžμ˜ 곡톡 νŽ˜μ΄μ§€ μƒμ„±μžμ— socket.on이 μžˆμŠ΅λ‹ˆλ‹€. μ‘μš© ν”„λ‘œκ·Έλž¨ λ‘œκ·Έμ•„μ›ƒμ΄ ν˜ΈμΆœλ˜λŠ” λ™μΌν•œ 파일의 ν•¨μˆ˜μ— λŒ€ν•œ μ†ŒμΌ“ 연결을 끊고 μ‹ΆμŠ΅λ‹ˆλ‹€.

ν•˜μ§€λ§Œ μ†ŒμΌ“μ„ 뢄리할 수 μžˆμŠ΅λ‹ˆλ‹€. λ‚˜λŠ” μ—¬λŸ¬ 개의 socket.on('event')이 μ‘μš© ν”„λ‘œκ·Έλž¨μœΌλ‘œ μ—¬λŸ¬ 번 λ°©μΆœλ©λ‹ˆλ‹€.
아무도 λ‚˜λ₯Ό λ„μšΈ 수 μžˆμŠ΅λ‹ˆκΉŒ?

Socket.disconnect()λŠ” λ‹€μŒμ„ μˆ˜ν–‰ν•΄μ•Ό ν•©λ‹ˆλ‹€.

2019λ…„ 11μ›” 11일 μ›”μš”μΌ 06:16 krunal9421, [email protected]μ—μ„œ λ‹€μŒκ³Ό 같이 μΌμŠ΅λ‹ˆλ‹€.

이온 μ‘μš© ν”„λ‘œκ·Έλž¨μ— μ†ŒμΌ“ 연결을 λŠμ„ 수 μ—†μŠ΅λ‹ˆλ‹€. λ‚˜λŠ” κ°€μ§€κ³ μžˆλ‹€
socket.on을 κ³΅κΈ‰μžμ˜ 곡톡 νŽ˜μ΄μ§€ μƒμ„±μžμ— μΆ”κ°€ν•©λ‹ˆλ‹€. ν•˜κ³ μ‹Άλ‹€
μ‘μš© ν”„λ‘œκ·Έλž¨μ—μ„œ λ™μΌν•œ 파일의 κΈ°λŠ₯으둜 μ†ŒμΌ“ 연결을 λŠμŠ΅λ‹ˆλ‹€.
λ‘œκ·Έμ•„μ›ƒμ΄ ν˜ΈμΆœλ©λ‹ˆλ‹€.

ν•˜μ§€λ§Œ μ†ŒμΌ“μ„ 뢄리할 수 μžˆμŠ΅λ‹ˆλ‹€. λ‚˜λŠ” 닀쀑 socket.on('event')μž…λ‹ˆλ‹€.
μ—¬λŸ¬ 번 μ‘μš© ν”„λ‘œκ·Έλž¨μœΌλ‘œ λ°©μΆœν•©λ‹ˆλ‹€.
아무도 λ‚˜λ₯Ό λ„μšΈ 수 μžˆμŠ΅λ‹ˆκΉŒ?

β€”
당신이 μ–ΈκΈ‰λ˜μ—ˆκΈ° λ•Œλ¬Έμ— 이것을 λ°›λŠ” κ²ƒμž…λ‹ˆλ‹€.
이 이메일에 직접 λ‹΅μž₯ν•˜κ³  GitHubμ—μ„œ ν™•μΈν•˜μ„Έμš”.
https://github.com/socketio/socket.io/issues/2476?email_source=notifications&email_token=AE35ASNI2K4DWOB4P2HPSATQTDMC7A5CNFSM4B5RLM52YYY3PNVWWK3TUL52HS4DFVEXG43VMXVB
λ˜λŠ” ꡬ독 μ·¨μ†Œ
https://github.com/notifications/unsubscribe-auth/AE35ASJPORGOSYQAEJEHHG3QTDMC7ANCNFSM4B5RLM5Q
.

@devyaz socket.disconnect()λ₯Ό μ‚¬μš©ν•˜μ—¬ μ†ŒμΌ“ 연결을 λŠμ„ 수 μ—†μŠ΅λ‹ˆλ‹€.
이 μƒ˜ν”Œ μ½”λ“œλ₯Ό κ³΅μœ ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.
https://i.stack.imgur.com/wrIEv.png.

곡톡 νŒŒμΌμ— μ½”λ“œλ₯Ό μž‘μ„±ν–ˆμŠ΅λ‹ˆλ‹€.

μ„œλ²„ λ˜λŠ” μ‚¬μš©μž μΈ‘μ—μ„œ 연결을 끊으렀고 ν•©λ‹ˆκΉŒ? 즉, μ„œλ²„λŠ”
μ‚¬μš©μž 연결을 λŠμŠ΅λ‹ˆλ‹€. μ„œλ²„κ°€ ν΄λΌμ΄μ–ΈνŠΈλ₯Ό μžƒμœΌλ©΄ μ—°κ²° ν•΄μ œκ°€ λ°œμƒν•˜κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€.
이벀트. κ·ΈλŸ¬λ‚˜ ν΄λΌμ΄μ–ΈνŠΈλŠ” λ‹€μŒμ„ ν˜ΈμΆœν•˜μ—¬ μ„œλ²„μ—μ„œ 연결을 λŠμ„ 수 μžˆμŠ΅λ‹ˆλ‹€.
socket.disconnect

2019λ…„ 11μ›” 20일 μˆ˜μš”μΌ 05:39 krunal9421, [email protected]μ—μ„œ λ‹€μŒκ³Ό 같이 μΌμŠ΅λ‹ˆλ‹€.

@devyaz https://github.com/devyaz μ†ŒμΌ“μ„ 뢄리할 수 μ—†μŠ΅λ‹ˆλ‹€.
socket.disconnect() μ‚¬μš©.
이 μƒ˜ν”Œ μ½”λ“œλ₯Ό κ³΅μœ ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.
https://i.stack.imgur.com/wrIEv.png.

곡톡 νŒŒμΌμ— μ½”λ“œλ₯Ό μž‘μ„±ν–ˆμŠ΅λ‹ˆλ‹€.

β€”
당신이 μ–ΈκΈ‰λ˜μ—ˆκΈ° λ•Œλ¬Έμ— 이것을 λ°›λŠ” κ²ƒμž…λ‹ˆλ‹€.
이 이메일에 직접 λ‹΅μž₯ν•˜κ³  GitHubμ—μ„œ ν™•μΈν•˜μ„Έμš”.
https://github.com/socketio/socket.io/issues/2476?email_source=notifications&email_token=AE35ASK4NY4SKG5JWSBDKCTQUSWNVA5CNFSM4B5RLM52YY3PNVWWK3TUL52HS4DFVEXG43VMXVB
λ˜λŠ” ꡬ독 μ·¨μ†Œ
https://github.com/notifications/unsubscribe-auth/AE35ASIFTISGTIAQQ7UKCJDQUSWNVANCNFSM4B5RLM5Q
.

ν΄λΌμ΄μ–ΈνŠΈ μΈ‘μ—μ„œ 이것을 μ‚¬μš©ν•©λ‹ˆλ‹€.

λ‘œκ·Έμ•„μ›ƒ κΈ°λŠ₯μ—μ„œ this.socketstatus.disconnect() 제 μƒκ°μ—λŠ”
".on("connected",.....)" ν•¨μˆ˜λ₯Ό μ œκ±°ν•΄μ•Ό ν•©λ‹ˆλ‹€.

2019λ…„ 11μ›” 22일 κΈˆμš”μΌ 11:50 krunal9421, [email protected]μ—μ„œ λ‹€μŒκ³Ό 같이 μΌμŠ΅λ‹ˆλ‹€.

ν΄λΌμ΄μ–ΈνŠΈ μΈ‘μ—μ„œ 이것을 μ‚¬μš©ν•©λ‹ˆλ‹€.

β€”
당신이 μ–ΈκΈ‰λ˜μ—ˆκΈ° λ•Œλ¬Έμ— 이것을 λ°›λŠ” κ²ƒμž…λ‹ˆλ‹€.
이 이메일에 직접 λ‹΅μž₯ν•˜κ³  GitHubμ—μ„œ ν™•μΈν•˜μ„Έμš”.
https://github.com/socketio/socket.io/issues/2476?email_source=notifications&email_token=AE35ASJTREAYRMF4THBK3FDQU6TOLA5CNFSM4B5RLM52YY3PNVWWK3TUL52HS4DFVEXG43VMXVBW
λ˜λŠ” ꡬ독 μ·¨μ†Œ
https://github.com/notifications/unsubscribe-auth/AE35ASJGKVGVUQNK454C63DQU6TOLANCNFSM4B5RLM5Q
.

연결이 끊긴 ν›„ μ†ŒμΌ“μ€ μ„œλ²„μ— λ‹€μ‹œ μ—°κ²°ν•©λ‹ˆλ‹€. κ·Έ ν›„ Android μ—μ„œ _io.socket.engineio.client.EngineIOException: xhr post error_ λ₯Ό 계속 ν‘œμ‹œν•©λ‹ˆλ‹€.
StackOverflow의 λŒ€λΆ€λΆ„μ˜ 닡변이 μž‘λ™ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
이 λ¬Έμ œκ°€ λ§‰ν˜”μ–΄μš” T_T.... λ„μ™€μ£Όμ„Έμš”!

λ‚΄ node.js + javaScript wepappμ—μ„œ 이 μ½”λ“œλ₯Ό κ΅¬ν˜„ν•˜λ €κ³  ν•˜μ§€λ§Œ νœ΄λŒ€μ „ν™”μ˜ λΈŒλΌμš°μ €κ°€ λ°±κ·ΈλΌμš΄λ“œμ— μžˆμ„ λ•Œ λΉ„ν™œμ„± νƒ­ λ˜λŠ” 잠긴 ν™”λ©΄μ—μ„œ λͺ‡ λΆ„ 후에 연결이 λŠμ–΄μ§‘λ‹ˆλ‹€.

μ†ŒμΌ“μ΄ μ—°κ²° ν•΄μ œλ˜μ—ˆμ„ λ•Œ( ping timeout λ˜λŠ” transport closed 응닡 포함) μ†ŒμΌ“μ— λ‹€μ‹œ μ—°κ²°ν•˜λ €κ³  ν–ˆμ§€λ§Œ λΆˆκ°€λŠ₯ν•©λ‹ˆλ‹€. 이것은 μ „ν™” λΈŒλΌμš°μ €μ—μ„œ 정상적인 λ™μž‘μž…λ‹ˆκΉŒ? λž©ν†± λ˜λŠ” λ°μŠ€ν¬ν†± λΈŒλΌμš°μ €μ—μ„œ μ˜ˆμƒλŒ€λ‘œ μž‘λ™ν•˜κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€.

아무도 λ‚˜λ₯Ό λ„μšΈ 수 μžˆμŠ΅λ‹ˆκΉŒ?

감사 ν•΄μš”

@asiermusa λ‹˜ μ•ˆλ…•ν•˜μ„Έμš”

건배!

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