Socket.io-client: μ—°κ²°-> μ—°κ²° ν•΄μ œ-> 연결이 μž‘λ™ν•˜μ§€ μ•ŠμŒ

에 λ§Œλ“  2011λ…„ 07μ›” 23일  Β·  33μ½”λ©˜νŠΈ  Β·  좜처: socketio/socket.io-client

λ‹€μŒ μ½”λ“œλŠ” λ‚˜λ₯Ό μœ„ν•΄ μž‘λ™ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
μ†ŒμΌ“ = io.connect ( 'http://host.com:8081'); socket.disconnect (); socket = io.connect ( 'http://host.com:8081');

이것은 λ‚΄κ°€ 찾은 ν•΄κ²° λ°©λ²•μž…λ‹ˆλ‹€.
socket = io.connect ( 'http://host.com:8081'); socket.disconnect (); io.sockets μ‚­μ œ [ ' http://host.com : 8081']; io.j = []; μ†ŒμΌ“ = io.connect ( 'http://host.com:8081');

Unable to reproduce bug

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

이것을 μ‚¬μš©ν•˜μ‹­μ‹œμ˜€ : io.connect(null,{'force new connection':true});

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

λ™μΌν•œ 문제-μ„€λͺ… ν•œ λ°©μ‹μœΌλ‘œ μ—°κ²°-μ—°κ²° ν•΄μ œ-재 μ—°κ²°ν•  수 μ—†μŠ΅λ‹ˆλ‹€.

κ·ΈλŸ¬λ‚˜ λ‹€μŒκ³Ό 같은 νš¨κ³Όκ°€ μžˆμŒμ„ λ°œκ²¬ν–ˆμŠ΅λ‹ˆλ‹€. μ΄μƒν•˜κ²Œλ„ setTimeout을 μƒλž΅ν•˜κ³  μ¦‰μ‹œ (λ˜λŠ” λ„ˆλ¬΄ 짧은 μ‹œκ°„ 초과 ν›„) λ‹€μ‹œ μ—°κ²°ν•˜λ©΄ μ¦‰μ‹œ 연결이 λŠμ–΄μ§‘λ‹ˆλ‹€.

var ns = io.connect(
        '/',
        { reconnect: false }
    ),
    numDisconnects = 2;

ns.on('connect', function () {

    console.log('Connected');

    if (numDisconnects > 0) {
        console.log('Disconnecting');
        ns.socket.disconnect();

        setTimeout(function () {
            console.log('Reconnecting');
            ns.socket.connect();
        }, 5000);
    }
    numDisconnects--;


});

ns.on('disconnect', function () {
    console.log('Disconnected');
});

μ†ŒμΌ“ = io.connect (host);
socket.disconnect ();
socket.socket.reconnect (); || socket.socket.connect (호슀트);
μž‘λ™ν•˜μ§€λ§Œ λ‹€μ‹œ μ—°κ²° λ˜λŠ” 두 번째 μ—°κ²° μ—°κ²° ν•΄μ œκ°€ λͺ‡ μ΄ˆλ§ˆλ‹€ μ‹€ν–‰λ©λ‹ˆλ‹€.

λ‚˜λŠ” 같은 λ¬Έμ œκ°€ μžˆμ—ˆκΈ° λ•Œλ¬Έμ—μ΄ λ²„κ·Έλ‘œ 인해 λ…Έλ“œ 녹아웃 ν•­λͺ©μ„ 제 μ‹œκ°„μ— 마칠 수 μ—†μ—ˆμŠ΅λ‹ˆλ‹€ :(
λ‹€λ₯Έ 마음이 μ•„ν”„κΈ° 전에 κ³ μ³μ£Όμ„Έμš”!

μœ„μ˜ ν•΄κ²° 방법 쀑 μ–΄λŠ 것도 λ‚˜λ₯Ό μœ„ν•΄ μΌν•˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€. μ—¬λŸ¬λΆ„, 이것은 μ§„μ§€ν•œ μ‡Ό μŠ€ν† νΌμž…λ‹ˆλ‹€. "μž¬ν˜„ ν•  수 μ—†μŒ"νƒœκ·Έκ°€ λ‚˜νƒ€λ‚˜λŠ” μ΄μœ λŠ” λ¬΄μ—‡μž…λ‹ˆκΉŒ? λ‚΄ ν…ŒμŠ€νŠΈ ν™˜κ²½. OS X 10.6의 μ΅œμ‹  Chromeμž…λ‹ˆλ‹€.

λ‚˜λŠ” λ˜‘κ°™μ€ κ²ƒμ„λ³΄κ³ μžˆλ‹€. λ˜ν•œ io.connect() 두 번째 ν˜ΈμΆœμ€ 였λ₯˜μ—†μ΄ μ‹€νŒ¨ν•©λ‹ˆλ‹€. ν•΄κ²° 방법을 찾은 μ‚¬λžŒμ΄ μžˆμŠ΅λ‹ˆκΉŒ?

이것을 μ‚¬μš©ν•˜μ‹­μ‹œμ˜€ : io.connect(null,{'force new connection':true});

μ–Όλ§ˆλ‚˜ νŽΈλ¦¬ν•˜κ³  μΆ”ν•œμ§€. 무엇 μ œκ±°μ— λŒ€ν•œ io.sockets[uuri] = socket; μ—μ„œ io.js:196 ? κ·Έ νŽ€μΉ˜ 라인의 μš”μ μ€ λ¬΄μ—‡μž…λ‹ˆκΉŒ?

λΆˆν–‰νžˆλ„ 여기에도 같은 λ¬Έμ œκ°€ μžˆμŠ΅λ‹ˆλ‹€. μ—°κ²° ν•΄μ œ ν›„μ—λŠ” λ‹€μ‹œ μ—°κ²°ν•  수 μ—†μŠ΅λ‹ˆλ‹€.

연결이 λŠμ–΄μ§„ ν›„ λ‚˜λ₯Ό μœ„ν•΄ μΌν•œ μœ μΌν•œ 것 :
io.j = [];
io.sockets = [];

νŽΈμ§‘ : ν΄λΌμ΄μ–ΈνŠΈ μΈ‘ disconnect ()의 μœ μΌν•œ λ¬Έμ œκ°€ μ•„λ‹™λ‹ˆλ‹€. μ—°κ²° ν•΄μ œμ‹œ 데이터 ꡬ쑰λ₯Ό μ •λ¦¬ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. SocketNamespace. $ events에 λ‹«νžŒ μ—°κ²° 등에 λŒ€ν•œ λͺ¨λ“  콜백이 μ—¬μ „νžˆ μžˆμŒμ„ μ•Œ 수 μžˆμŠ΅λ‹ˆλ‹€.

@MrJoes μ‚¬μš© io.connect(null,{'force new connection':true});

μ’‹μ•„μš”,이게 정말 재 μ—°κ²°μ„μœ„ν•œ μ΅œμ’… APIμΈκ°€μš”? 였히렀 μ΄μƒν•©λ‹ˆλ‹€.

@skrat λ‚˜λŠ” λ‹Ήμ‹ κ³Ό λ™μ˜ν•©λ‹ˆλ‹€. io.reconnect APIκ°€ μžˆμ–΄μ•Όν•©λ‹ˆλ‹€.

λ‚˜λŠ” κ·Έλ ‡κ²Œ μƒκ°ν•˜μ§€ μ•ŠλŠ”λ‹€. io.connect λ‹€μŒ io.disconnect 그리고 io.connect λŠ” μ˜ˆμƒλŒ€λ‘œ μž‘λ™ ν•  것이닀.

@milani : io.sockets []에 λ‚¨μ•„μžˆλŠ” κ³ μ•„ μ†ŒμΌ“, 이벀트 ν•Έλ“€λŸ¬ λ“±μœΌλ‘œ 인해 λ©”λͺ¨λ¦¬κ°€ λˆ„μˆ˜λ©λ‹ˆκΉŒ?

μ†”μ§νžˆ λ§ν•˜λ©΄λ³„λ‘œ 쒋은 생각이 μ•„λ‹™λ‹ˆλ‹€.

@MrJoes λ©”λͺ¨λ¦¬ λˆ„μˆ˜κ°€ ν™•μ‹€ν•©λ‹ˆκΉŒ? io.socket의 @ 3rd-Eden이이 APIλ₯Ό μ‚¬μš©ν•˜λΌκ³ ν–ˆμŠ΅λ‹ˆλ‹€.

μ‹ κ²½ 쓰지 λ§ˆμ„Έμš”. 'force new connection'을 μ „λ‹¬ν•˜λ©΄ io.sockets []에 μ†ŒμΌ“μ„ μΆ”κ°€ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

ν•˜μ§€λ§Œ λ©€ν‹°ν”Œλ ‰μ‹±μ„ μžƒμ–΄ 버리기 λ•Œλ¬Έμ— 특히 μ—”λ“œ ν¬μΈνŠΈμ—μ„œ μ•½κ°„ λͺ» μƒκ²ΌμŠ΅λ‹ˆλ‹€. λ©€ν‹°ν”Œλ ‰μ‹±μ„ μˆ˜ν–‰ν•˜λ €λ©΄ io.sockets의 μ†ŒμΌ“μ— μ˜μ‘΄ν•©λ‹ˆλ‹€.

μ†ŒμΌ“ ν”„λ‘œν†  νƒ€μž…μ„ 톡해 재 연결을 μ‚¬μš©ν•˜λŠ” @Gorokhov μ œμ•ˆμ€ μ €μ—κ²Œ 잘 μž‘λ™ν–ˆμŠ΅λ‹ˆλ‹€.
socket.socket.reconnect ()
감사

μ—¬κΈ°μ—μ„œ 같은 문제-socket.reconnect ()κ°€ λ‚˜λ₯Ό μœ„ν•΄ μž‘λ™ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λͺ‡ 가지 λ‹€λ₯Έ ν•΄κ²° 방법을 μ‹œλ„ν•΄ λ³΄κ² μŠ΅λ‹ˆλ‹€. 이것은 싀망 μŠ€λŸ½μ§€λ§Œ μ—…λ°μ΄νŠΈμ—μ„œ μ€‘λ‹¨λ˜λŠ” 맀우 기본적인 κΈ°λŠ₯μž…λ‹ˆλ‹€. 이 λ•Œλ¬Έμ— λ§Žμ€ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ μ‰½κ²Œ μ—…λ°μ΄νŠΈ ν•  수 μ—†λ‹€κ³  ν™•μ‹ ν•©λ‹ˆλ‹€.

κ°œλ°œμžκ°€ 문제λ₯Ό μž¬ν˜„ν•˜λŠ” 데 도움이 ν•„μš”ν•˜λ©΄ 기꺼이 도와 λ“œλ¦¬κ² μŠ΅λ‹ˆλ‹€.이 버그에 "μž¬ν˜„ ν•  수 μ—†μŒ"νƒœκ·Έκ°€ ν‘œμ‹œλ˜μ–΄ λ†€λžμŠ΅λ‹ˆλ‹€.

이 pull μš”μ²­μœΌλ‘œ 인해 곧 μ£Όμš” μ—…λ°μ΄νŠΈκ°€μžˆμ„ κ²ƒμœΌλ‘œ λ³΄μž…λ‹ˆλ‹€ : https://github.com/LearnBoost/socket.io-client/pull/343
@cacois socket.reconnect () λŒ€μ‹ 

μ•„, 쒋은 μ†Œμ‹ :-)

@ wackfordjf3 μ•ˆλ…•ν•˜μ„Έμš” κ°μ‚¬ν•©λ‹ˆλ‹€, 쒋은 μ „ν™”μž…λ‹ˆλ‹€. μ§€κΈˆ μž‘λ™ν•©λ‹ˆλ‹€. :)

λ‹€μ‹œ μ—°κ²°ν•˜λŠ” 데 μ—¬μ „νžˆ λ¬Έμ œκ°€ μžˆμŠ΅λ‹ˆλ‹€.
두 번째 재 연결은 μ„œλ²„μ—μ„œ μ—¬λŸ¬ 재 μ—°κ²° 이벀트λ₯Ό λ°œμƒμ‹œν‚΅λ‹ˆλ‹€. (그리고 이것은 λͺ¨λ“  후속 μž¬μ—° κ²°κ³Ό ν•¨κ»˜ μ¦κ°€ν•©λ‹ˆλ‹€). λ„€μž„ μŠ€νŽ˜μ΄μŠ€μ—μ„œ 재 연결을 μ‹€ν–‰ μ€‘μž…λ‹ˆλ‹€.

socket = io.connect (url { 'reconnect': false}); socket.disconnect; // 첫 번째 μ—°κ²° ν•΄μ œ
socket.socket.reconnect (); socket.disconnect (); // 두 번째 μ—°κ²° ν•΄μ œ
socket.socket.reconnect (); // 두 번째 λ‹€μ‹œ μ—°κ²°

μ˜€μ „ : μ†ŒμΌ“. [email protected]

이것에 λ”ν•˜μ—¬ :
μΆ”μ•…ν•œ 방법은 잘 μž‘λ™ν•©λ‹ˆλ‹€.
μ‚­μ œ io.sockets [url]; io.j = [];
μ†ŒμΌ“ = io.connect (url);

μ‚¬λžŒλ“€μ΄ 이미 μ—¬κΈ°μ—μ„œ κ°€μ§€κ³ μžˆλŠ” 것과 같은 것을 μ§λ©΄ν•˜μ‹­μ‹œμ˜€. λ„€μž„ 슀페이슀 μ‹œλ‚˜λ¦¬μ˜€μ—μ„œλ„ μ΄μƒν•©λ‹ˆλ‹€. λ„€μž„ μŠ€νŽ˜μ΄μŠ€μ— λŒ€ν•œ μ†”λ£¨μ…˜μ„ μ‚­μ œν•˜μ‹­μ‹œμ˜€.

var base = ' http : // localhost : 3000'
, 채널 = '/ μ±„νŒ…'
, URL = κΈ°λ³Έ + 채널;

var socket = io.connect (url);

// socket.disconnect () ν˜ΈμΆœμ€ 연결이 λŠμ–΄μ§€μ§€ μ•ŠμœΌλ―€λ‘œ λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.
io.sockets [base] .disconnect ();

// ꡬ문을 λ‹€μ‹œ μ—°κ²°ν•©λ‹ˆλ‹€.
io.sockets [base] μ‚­μ œ; io.j = [];
μ†ŒμΌ“ = io.connect (url);

μ°Έκ³  : socket.io 버전-0.9.0, ν”Œλž«νΌ : Windows 7 ν™ˆ 프리미엄

연결을 λŠμ€ ν›„ μ—°κ²°ν•  수 μ—†μ–΄μ„œ μ‹œκ°„μ΄ 초과 된 λ‹¨μœ„ ν…ŒμŠ€νŠΈμ™€ μ”¨λ¦„ν•˜λ©΄μ„œ μ˜€ν›„λ₯Ό λ³΄λƒˆμŠ΅λ‹ˆλ‹€. { 'force new connection': true}으둜 λ¬Έμ œκ°€ ν•΄κ²°λ˜μ—ˆμŠ΅λ‹ˆλ‹€. κ°μ‚¬ν•©λ‹ˆλ‹€ @milani

Cucumber.jsλ₯Ό μ‚¬μš©ν•˜λŠ” λ™μΌν•œ λ¬Έμ œμž…λ‹ˆλ‹€. 객체λ₯Ό λ§Œλ“€κ³  νŒŒκ΄΄ν•΄μ•Όν•˜λ―€λ‘œ λ™μΌν•œ μ—°κ²°, μ—°κ²° ν•΄μ œ, μ—°κ²° μ‹€νŒ¨μ— μ§λ©΄ν–ˆμŠ΅λ‹ˆλ‹€. Thx @milani 및 @rawberg

그것은 λ‚˜λ₯Ό μœ„ν•΄ μž‘λ™ν•©λ‹ˆλ‹€! κ°μ‚¬ν•©λ‹ˆλ‹€ @mrjoes.

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

이 λ¬Έμ œκ°€ λ‹€μ‹œ λ°œμƒν•  μˆ˜μžˆλŠ” μ‚¬μš©μžλ₯Ό μœ„ν•΄ v1.0 λ¦΄λ¦¬μŠ€μ—μ„œ 'μƒˆ μ—°κ²° κ°•μ œ 적용'섀정을 이제 'forceNew'λΌκ³ ν•©λ‹ˆλ‹€.

λ‚˜λŠ” BCλ₯Ό μΆ”κ°€ν•˜κΈ° μœ„ν•΄ 컀밋을 λ°€μ—ˆμœΌλ―€λ‘œ 곧 아무도이 λ¬Έμ œκ°€ λ°œμƒν•˜μ§€ μ•Šμ•„μ•Όν•©λ‹ˆλ‹€!

4 me, socket = io.connect (socketUrl, { 'forceNew': true});

forceNewλŠ” 전체 λ„€μž„ 슀페이슀 λ©€ν‹°ν”Œλ ‰μ‹± μ‹œμŠ€ν…œμ„ λΉ„ν™œμ„±ν™”ν•©λ‹ˆλ‹€. 그게 정말 ν•΄κ²°μ±…μž…λ‹ˆκΉŒ?

λ‚˜λŠ” μ‚¬μš©ν•˜κ³ μžˆλ‹€ :
μ†ŒμΌ“ = io.connect ()
...
// 이
socket.io.reconnect ()
..

Client.prototype.connect = function() {
    if (!this.connection) {
        this.connection = this.socket.connect(config.host + ':' + config.port);
    }
    else {
        if (!this.connection.connected) {
            this.connection.connect();
        }
    }
};

io.connect (null, { 'μƒˆ μ—°κ²° κ°•μ œ 적용': true});

이것은 λ‚΄ 문제λ₯Ό ν•΄κ²°ν•©λ‹ˆλ‹€. κ°μ‚¬ν•©λ‹ˆλ‹€. 밀라 λ―Έ

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