Socket.io: рдбрдмрд▓ рдХрдиреЗрдХреНрдЯ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 23 рдЕрдЧре░ 2011  ┬╖  42рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: socketio/socket.io

рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдбрдмрд▓ рдХрдиреЗрдХреНрдЯ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЗ рд▓рд┐рдП рд╣реЛрддрд╛ рд╣реИ (рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╕рднреА рд╣реИрдВрдбрд▓рд░ рдХреЛ рджреЛ рдмрд╛рд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ), рдЕрдкрдиреЗ рджрдо рдкрд░ рд╕реНрдерд┐рддрд┐ рдХреЛ рдкреБрди: рдЙрддреНрдкрдиреНрди рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдмрдЧ рд░рд┐рдкреЛрд░реНрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд░рд╣реЗрдВ, рд╡реНрдпрд╡рд╣рд╛рд░ рдареАрдХ рд╡реИрд╕рд╛ рд╣реА рд╣реИ рдпрджрд┐ рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд┐рдП рдЧрдП рд╕реЙрдХреЗрдЯ рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВред рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ () рд╕реЙрдХреЗрдЯред (рд╡реЗрдмрд╕реЛрдХреЗрдЯ рдФрд░ рдлреНрд▓реИрд╢рд╕реНрдХреИрдЯ рдкрд░ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛)

Socket.IO client bug

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдореИрдВ рдЕрднреА рднреА рдореВрд▓ рдЙрджрд╛рд╣рд░рдг рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдореБрдЭреЗ рдПрдХ рдареАрдХ рд▓рдЧрд╛, рд╣рд╛рд▓рд╛рдБрдХрд┐ рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рдЙрдЪрд┐рдд рд╣реИред рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рд╕рднреА рдХреЛ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ

io.once('connection', ...)

рдХреЗ рдмрдЬрд╛рдп

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

рд╕рднреА 42 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рддреНрд╡рд░рд┐рдд рд╣реИрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЖрдк "рдирдП рдХрдиреЗрдХреНрд╢рди рдХреЛ рдордЬрдмреВрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ": рдЧрд▓рдд рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди

рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдореЗрдВ рдЗрд╕ рдмрдЧ рдХрд╛ рдЕрд╡рд▓реЛрдХрди рдХрд┐рдпрд╛ред
рд░реЗрдкреНрд░реЛрдбреНрдпреВрд╕ рдЕрдЧрд▓реЗ рдерд╛ред WebFcket рдХрдиреЗрдХреНрд╢рди рдХреЗ рд╕рд╛рде FF рдореЗрдВ, рдХреБрдЫ рддреНрд░реБрдЯрд┐ рд╣реБрдИред рдлрд┐рд░ рдЕрдиреНрдп 3 рдкреБрди: рдЬреЛрдбрд╝рдиреЗ рдХреА рдШрдЯрдирд╛рдУрдВ рдХреЗ рдмрд╛рдж рдПрдХ рдЙрддреНрдкрдиреНрди рд╣реБрдЖ рдерд╛ред рдЗрд╕рдХреЗ рдмрд╛рдж 3 рдирдП рдХрдиреЗрдХреНрд╢рди рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдП рдЧрдП, рдФрд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЛ рдПрдХ рдХреЗ рдмрдЬрд╛рдп 3 рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рд╣реБрдПред

рд╢рд╛рдпрдж рдкреБрдирдГ рддрд░реНрдХ рддрд░реНрдХ рдореЗрдВ рдХреБрдЫ рдмрдЧ? рдХреБрдЫ, рдЬреЛ рдПрдХ рдХреЗ рдмрдЬрд╛рдп рдХрдИ рдкреБрдирд░рд╛рд╡рд░реНрддрди рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред

рдореИрдВрдиреЗ рдкреБрд░рд╛рдиреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдореЗрдВ рдЙрди рдореБрджреНрджреЛрдВ рдХреЛ рджреЗрдЦрд╛ рд╣реИ рдЬреЛ рд╡реЗрдмрд╕реЛрдХреЗрдЯ (рдЬреИрд╕реЗ, рдПрдлрдПрдл 3.6) рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдВ рдбреЛрдо рд░реЗрдбреА рдЗрд╡реЗрдВрдЯ рдореЗрдВ рд╕реЙрдХреЗрдЯ.рдЖрдИрдУ ("$ ()" рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рдирд╛) рдХрдИ рдХрдиреЗрдХреНрд╢рди рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рдмрд╛рдж рдХреЗ рд╡рд┐рдВрдбреЛ рдореЗрдВ рд▓реЛрдб рдХрд░рдирд╛ред рдШрдЯрдирд╛ рдирд╣реАрдВ рд╣реИред рдореИрдВрдиреЗ рдЗрд╕ рд╡рд┐рд╢реЗрд╖ рдореБрджреНрджреЗ рдХреЛ рд▓рдЧрд╛рддрд╛рд░ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдкрд╛рдпрд╛ рд╣реИред рдпрдХреАрди рдирд╣реАрдВ рд╣реЛрддрд╛ рдХрд┐ рдпрд╣ рд╡рд╣реА рдЪреАрдЬрд╝ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк рджреЗрдЦ рд░рд╣реЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рд▓рдХреНрд╖рдг рдмрд╣реБрдд рд╕рдорд╛рди рджрд┐рдЦрддреЗ рд╣реИрдВред

рдПрдХ рд╣реА рдореБрджреНрджрд╛ рдпрд╣рд╛рдБ рднреАред рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпрджрд┐ рд╕рд░реНрд╡рд░ рдХрд┐рд╕реА рднреА рдХрд╛рд░рдг рд╕реЗ рджреБрд░реНрдШрдЯрдирд╛рдЧреНрд░рд╕реНрдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рд╡рд╛рдкрд╕ рдЪрд╛рд▓реВ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╣рд░ рдмрд╛рд░ n + 1 рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдУрдВ рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рдкреБрди: рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВред рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ 3 рд╕рд░реНрд╡рд░ рдХреНрд░реИрд╢ рд╣реИрдВ, рддреЛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкреНрд░рддреНрдпреЗрдХ рд╕рд░реНрд╡рд░ рд╕реЗ 4 рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдПрдВ рдЖрддреА рд╣реИрдВред рдкреГрд╖реНрда рдХреЛ рддрд╛рдЬрд╝рд╛ рдХрд░рдиреЗ рд╕реЗ рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рд╣реЛ рдЬрд╛рддреА рд╣реИред рдХреНрдпрд╛ рдХрд┐рд╕реА рдХреЛ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдорд╛рдзрд╛рди рдорд┐рд▓рд╛ рд╣реИ [рднрд▓реЗ рд╣реА рдпрд╣ рдЕрд╕реНрдерд╛рдпреА рд╣реЛ?]

рдпрд╣ рдПрдХ рд╕реНрдерд╛рдпреА рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдХреЛрдб рдХреЛ рдлрд┐рд░ рд╕реЗ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд┐рдпрд╛ рд╣реИ рддрд╛рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдШрдЯрдирд╛ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдмрдВрдзреА рд╣реЛ рдФрд░ рджреЛрд╣рд░рд╛рд╡ рдХрд╛ рдореБрджреНрджрд╛ рд╕реНрд╡рддрдГ рд╕реБрд▓рдЭрдиреЗ рдкрд░ рд╣рд▓ рд╣реЛ рдЬрд╛рдП

me.socket.on('connect', function () {
});

me.socket.on('message', function(data) {

});

me.socket.on('disconnect', function() {

});

Wireshark рдбрдВрдк рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреЗ рдПрдХ рд╕рдкреНрддрд╛рд╣ рдХреЗ рдмрд╛рдж, рдореИрдВ рдЗрд╕ рдХреАрдбрд╝реЗ рдХреЗ рд▓рд┐рдП рдХрд╛рд░рдг рдЦреЛрдЬрдиреЗ рдФрд░ рдкреБрди: рдкреЗрд╢ рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣рд╛ рд╣реВрдВред

рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рд╕рд╛рдордВрдЬрд╕реНрдп рддрд░реНрдХ рдмрд╣реБрдд рдирд╛рдЬреБрдХ рд╣реИред рдпрд╣ рдХрдИ рдЯрд╛рдЗрдорд░ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рдЪрд▓ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдпрд╣ рдХрдИ рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдгреЛрдВ рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рд░реЗрдЦрд╛ https://github.com/LearnBoost/socket.io-client/blob/master/lib/socket.js#L511 рдЗрд╕ рдмрдЧ рдХрд╛ рдореБрдЦреНрдп рдХрд╛рд░рдг рд╣реИред

рдЕрдм рдкреВрд░реНрдг рдкреБрди: рдкреЗрд╢ рдХрд░реЗрдВ:

  1. рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рд╕рд╛рде рд╕рд░реНрд╡рд░ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВред
  2. рдЕрдкрдиреЗ рд╕рд░реНрд╡рд░ рдореЗрдВ рдзреАрдорд╛ рдХреЛрдб рдбрд╛рд▓реЗрдВ (рд╣рдореЗрдВ 4-8 рд╕реЗрдХрдВрдб рдХреЗ рд▓рд┐рдП рдиреЛрдб.рдЬреЗрдПрд╕ рдореЗрдирд▓реВрдк рдХреЛ рдирд┐рд▓рдВрдмрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП)
    рд╕рдорд╛рд░реЛрд╣ рдлрд╛рдЗрдмреНрд░реЛ (рдПрди) {
    if (n <2) рд╡рд╛рдкрд╕реА 1;
    рд╡рд╛рдкрд╕реА рдлрд╛рдЗрдмреНрд░реЛ (рдПрди -2) + рдлрд╛рдЗрдмреНрд░реЛ (рдПрди -1);
    }
    рдЗрд╕реЗ рдСрд░реНрдЯ-рд╕реЗрдХреНрд╢рди рдореЗрдВ рдбрд╛рд▓реЗрдВред рдЗрд╕реЗ рд╣рд╛рде рдорд┐рд▓рд╛рдирд╛ рдЪрд╛рд╣рд┐рдП:
    io.set ('рдкреНрд░рд╛рдзрд┐рдХрд░рдг', рдлрд╝рдВрдХреНрд╢рди (рдбреЗрдЯрд╛, рд╕реНрд╡реАрдХрд╛рд░) {
    рдХрдВрд╕реЛрд▓.info ("рдлрд╝рд┐рдмреЛ ::" + рдлрд╛рдЗрдмреЛ (41));
    рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдиреЛрдб рдХрдВрд╕реЛрд▓ рдореЗрдВ рдкреНрд░рдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдлрд╛рдЗрдмреНрд░реЛ (рдПрди) рдХреЛ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП, рдЬреЛ
    4-8 рд╕реЗрдХрдВрдб рдХреЗ рд▓рд┐рдП рдореБрдЦреНрдп-рд▓реВрдк рдХреЛ рдмреНрд▓реЙрдХ рдХрд░реЗрдЧрд╛ред
  3. рдЕрдм, рдЖрдкрдХреЛ рдЕрдкрдиреЗ рд╕рд░реНрд╡рд░ рдХрд╛ рддреЗрдЬреА рд╕реЗ рдкреБрдирдГ рдЖрд░рдВрдн рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
    рдХрдиреЗрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рд╕реНрд▓реЛ рдХреЛрдб рд▓рд╛рдЧреВ рд╣реЛрдЧрд╛ред
    рдЧреНрд░рд╛рд╣рдХ рдХреЛ рдпрд╣ рд╕реВрдЪрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╡рд╣ рд╣реИрдВрдбрд╕рдо рдирд╣реАрдВ рд╣реИред
    рдФрд░ рдЕрдм рдпрд╣ рдлрд┐рд░ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИред
    рдХрдВрд╕реЛрд▓ рдореЗрдВ рдЖрдкрдХреЛ рдХрдИ рд░реАрдХрдиреЗрдХреНрдЯ рдЕрдЯреИрдХреНрд╕ рджрд┐рдЦрд╛рдИ рджреЗрдВрдЧреЗ (рдпрджрд┐ рдЖрдк "рдХреЙрд▓рдмреИрдХ / рдлрд┐рд░ рд╕реЗ рдХрдиреЗрдХреНрдЯ / рдХреЙрд▓рдмреИрдХ" рдкрд░ рд▓реЙрдЧрд┐рдВрдЧ рдбрд╛рд▓рддреЗ рд╣реИрдВ)ред
    рд╣рдорд╛рд░реА рд╕реБрд╕реНрддреА рд╣реИрдХ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдЗрд╕реЗ рд╣рдореЗрд╢рд╛ рдХреЗ рд▓рд┐рдП рджреЛрд╣рд░рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЬреАрд╡рди рдореЗрдВ рдпрд╣ рдХрдо рд╕реЗ рдХрдо рдХрдИ рд╕реЗрдХрдВрдб рдХреЗ рд▓рд┐рдП рд╕рд░реНрд╡рд░-рдЙрддреНрддрд░ рдХреА рдордВрджреА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреБрди: рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИред
рдпрд╣ рддрдм рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬрдм рдиреЛрдб.рдЬреЗрдПрд╕ рднрд╛рд░реА-рднрд╛рд░ рдХреЗ рдЕрдзреАрди рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдХреБрдЫ рджреЗрд░реА рд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд░рддрд╛ рд╣реИред
рдпрд╛ рдХреБрдЫ рдиреЗрдЯрд╡рд░реНрдХ рдордВрджреА рдХреЗ рдХрд╛рд░рдг рднреА рдРрд╕рд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рд╕рд░реНрд╡рд░ рд░рд┐рд╕реНрдЯрд╛рд░реНрдЯ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рднреА рдЗрд╕реЗ рджреЛрдмрд╛рд░рд╛ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдпрд╣ рдкрдВрдХреНрддрд┐ (рд╕реЙрдХреЗрдЯ.рдЬреЗрдПрд╕, 511):
self.reconnectionTimer = setTimeout (рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдкреБрди: рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ, self.reconnectionDelay);

рдХрдиреЗрдХреНрдЯ рдХреЙрд▓ рдХреЗ рдмрд╛рдж рд╢реЗрдбреНрдпреВрд▓ рдЗрд╡реЗрдВрдЯред рдФрд░ рдЕрдЧрд░ рдХрдиреЗрдХреНрдЯ-рд░рд┐рд╕реНрдкреЙрдиреНрд╕ рдХрдо рд╕реЗ рдХрдо рдПрдХ рд╕реЗрдХрдВрдб рдХреЗ рд▓рд┐рдП рджреЗрд░реА рд╣реЛ рд░рд╣реА рд╣реИ, рддреЛ рдпрд╣ рдЯреНрд░рд┐рдЧрд░ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдХрддрд╛рд░ рдореЗрдВ рдирдП рдкреБрди: рдХрдиреЗрдХреНрдЯ рдХрд░рддрд╛ рд╣реИред 2 рд╕реЗрдХрдВрдб рдХреЗ рдмрд╛рдж рдпрд╣ рдПрдХ рдФрд░ рдПрдХ рдЬреЛрдбрд╝рддрд╛ рд╣реИред

рдореИрдВрдиреЗ рдПрдХ рдареАрдХ рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдмрд╣реБрдд рдареЛрд╕ рдирд╣реАрдВ рджрд┐рдЦрддрд╛ рд╣реИред рдореБрдЦреНрдп рдореБрджреНрджрд╛ - рдХреИрд╕реЗ рдХрд╛рд░рдг рд╣реИ рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЙрд▓рдмреИрдХ / рдЯрд╛рдЗрдорд░ рдХреЛ рд╕рдорд╡рд░реНрддреА рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рд╕рдорд╡рд░реНрддреА рд░реВрдк рд╕реЗ рдЪрд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдпрд╣ рдкрдВрдХреНрддрд┐: https://github.com/LearnBoost/socket.io-client/blob/master/lib/socket.js#L490 рднреА рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХрдиреЗрдХреНрд╢рди рдХреЛ рдЬрдиреНрдо рджреЗ рд╕рдХрддреА рд╣реИред

рд╕реЙрдХреЗрдЯ.рдЖрдИрдУ рдЧреНрд░рд╛рд╣рдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рддрд░реНрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕рд░рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЕрдЧрд░ рдпрд╣ рдХреБрдЫ рд░рд╛рдЬреНрдп рдорд╢реАрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд░рд╛рдЬреНрдп рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЭрдВрдбреЗ (рдЬреБрдбрд╝рд╛ рд╣реБрдЖ, рдХрдиреЗрдХреНрдЯ рдХрд░рдирд╛, рдлрд┐рд░ рд╕реЗ рдЬреЛрдбрд╝рдирд╛, рдЖрджрд┐) рдореЗрдВ рдлреИрд▓рд╛ рд╣реБрдЖ рд╣реИред рдФрд░ рдХрдИ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рдореИрдВрдиреЗ рдЧрд╛рд░реНрдбреНрд╕ рдХреЛ рджреЗрдЦрд╛ рдЬреИрд╕реЗ "if (self.reconnecting)" рдФрд░ рдХрдИ рдЕрдиреНрдпред
рд░рд╛рдЬреНрдп рдорд╢реАрди рд░рд╛рдЬреНрдп рдФрд░ рдШрдЯрдирд╛рдУрдВ рдХреЗ рд╕реЗрдЯ рдХреЗ рд▓рд┐рдП рдЗрд╕ рддрд░реНрдХ рдХреЛ рд╕рд░рд▓ рдмрдирд╛ рд╕рдХрддреА рд╣реИред рдФрд░ рдЯрд╛рдЗрдорд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ рдЖрдЧ рдХреА рдШрдЯрдирд╛ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рдпрд╣ рдШрдЯрдирд╛ рдЧрд▓рдд рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╣реИ, рддреЛ рд░рд╛рдЬреНрдп-рдорд╢реАрди рдЗрд╕ рдШрдЯрдирд╛ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░ рд╕рдХрддреА рд╣реИ рдФрд░ рдЦреБрдж рдХреЛ рдкрд░реЗрд╢рд╛рди рдирд╣реАрдВ рдХрд░ рд╕рдХрддреА рд╣реИред

рдореБрдЭреЗ JS рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫрд╛ STM рдирд╣реАрдВ рдорд┐рд▓рд╛ рд╣реИ, рд▓реЗрдХрд┐рди Ruby рд╕реЗ рдпрд╣ рдЖрд╕рд╛рдиреА рд╕реЗ JS рдореЗрдВ рдкреЛрд░реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: https://github.com/geekq-workflow

рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рд╕реБрдзрд╛рд░рдиреЗ рдкрд░ +1ред рдореИрдВ рд╕реАрдзреЗ рд╕реЙрдХреЗрдЯ.рдЖрдИрдУ рдпрд╛ рд╕реЙрдХреЗрдЯ.рдЖрдИрдУ-рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдП рдмрд┐рдирд╛ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЗ рд▓рд┐рдП рдЪрд╛рд░реЛрдВ рдУрд░ рдПрдХ рдХрд╛рдо рдЦреЛрдЬрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдПрдХрдорд╛рддреНрд░ рддрд░реАрдХрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдореИрдВ рднрд░реЛрд╕реЗрдордВрдж рд░реВрдк рд╕реЗ рдЖрдпрд╛ рд╣реВрдВ, рдмрд╕ рдкреБрди: рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдореЗрдВ рдЕрдХреНрд╖рдо рд╣реИред рдЬреЛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реИ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдореЛрдмрд╛рдЗрд▓ рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рдмрдврд╝рддреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд╕рд╛рде, рдлрд┐рд░ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдирд╛ рдПрдХ рдмрдбрд╝реА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдХреНрдпрд╛ рдХрд┐рд╕реА рдХреЛ рднреА рдкрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╕реВрдЪреА рдореЗрдВ рдХреИрд╕реЗ рдЖрддрд╛ рд╣реИ?

рдЖрд╣ред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдЗрд╕ рдореБрджреНрджреЗ рд╕реЗ 3rd-Eden рдХреЛ рд╕реМрдВрдкрд╛ рдЧрдпрд╛ рд╣реИ: https://github.com/LearnBoost/socket.io/issues/430

рдореИрдВрдиреЗ рдПрдХ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рдлрд┐рдХреНрд╕ рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рдкреБрд▓ рдЕрдиреБрд░реЛрдз рднреЗрдЬрд╛ рд╣реИред рдпрд╣ 0.8.4 рдореЗрдВ рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЕрдиреНрдп рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЗрд╕реЗ рд╣реИрдВрдбрд╢реЗрдХ рдХреЗ рд▓рд┐рдП AJAX (рдпрд╛ CORS) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕реНрд░реЛрдд рдХреНрд╖рдорддрд╛ рдореЗрдВ рдЕрдХреНрд╖рдо рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЗрд╕реЗ рджреЗрдЦреЗрдВ: https://github.com/LearnBoost/socket.io-client/pull/342 рд╡рд┐рд╡рд░рдг рдХреЗ рд▓рд┐рдПред

рдЗрддрдиреЗ рдкреБрд░рд╛рдиреЗ рдореБрджреНрджреЗ рдХреЛ рдкреБрдирд░реНрдЬреАрд╡рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрд╖рдорд╛ рдХрд░реЗрдВред рдореИрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдБ рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рд╣реИ рдХрд┐ рд╕реЙрдХреЗрдЯ рдХрд╛ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг .io (рдпрд╛ рдХрдо рд╕реЗ рдХрдо, рдореИрдВрдиреЗ npm рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рд╕реЙрдХреЗрдЯред рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдЕрднреА рднреА рдореЗрд░реЗ рд▓рд┐рдП рд╣реИ, рдореИрдВ рд╕реЙрдХреЗрдЯ рдХреЗ рд▓рд┐рдП рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдирдпрд╛ рд╣реВрдБред рдПрдХ рдкреВрд░реЗ рдХреЗ рд░реВрдк рдореЗрдВред рдореЗрд░реЗ рдкрд╛рд╕ рдРрд╕реЗ рдореБрджреНрджреЗ рднреА рд╣реИрдВ рдЬрд╣рд╛рдВ рдХрднреА-рдХрднреА рдкрд╣рд▓рд╛ рдХрдиреЗрдХреНрд╢рди (рджреЛрдиреЛрдВ рдореЗрдВ рд╕реЗ рдЬреЛ рдореИрдВрдиреЗ рдХреЗрд╡рд▓ рдХрд┐рд╕реА рдПрдХ рд╕рдордп рдореЗрдВ рд╣реБрдЖ рд╣реИ) рдореЗрдВ рдПрдХ рд░реАрдб рдПрд░рд░ рд╣реИред рдпрджрд┐ рдореИрдВ рдХреБрд░рдХреБрд░рд╛ рдХрд╣рдиреЗ рдореЗрдВ рд╕рд╣реА рд╣реВрдВ, рддреЛ рдЖрдкрдХрд╛ рд╕реБрдзрд╛рд░ рдкреНрд░рддрд┐рдмрджреНрдз рдерд╛, рдЗрд╕рд▓рд┐рдП рдРрд╕рд╛ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдпрд╣ рддрдм рднреА рд╣реЛрддрд╛ рд╣реИ рдЬрдм рддрдХ рдХрд┐ рдореИрдВ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХрд╛рд░рдХ рдирд╣реАрдВ рдЫреВрдЯ рдЬрд╛рддрд╛?

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ -

рдпрд╣ рд╕реЙрд░реА рдлреЛрд░реНрдХ рд╕реЙрдХреЗрдЯ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ редio рдФрд░ рдЙрд╕ рдкрд░ рдПрдХ рдлрд┐рдХреНрд╕ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдпрд╣ рдлрд┐рдХреНрд╕ рдореВрд▓ рд╕реЙрдХреЗрдЯ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдмрджреНрдз рдирд╣реАрдВ рдерд╛ред

@JTallis рдореЗрд░реЗ рдкрд╛рд╕ @gdiz рдЬреИрд╕рд╛ рд╣реА рдореБрджреНрджрд╛ рдерд╛ рдФрд░ рдЙрдирдХреЗ рд╕реБрдЭрд╛рд╡ рдиреЗ рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд┐рдпрд╛ред рдпрджрд┐ рдЖрдкрдХрд╛ рдореБрджреНрджрд╛ рд╕рдорд╛рди рд╣реИ, рддреЛ рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕реЗ рдЖрдЬрд╝рдорд╛рдПрдВ рдФрд░ рд╣рдореЗрдВ рдмрддрд╛рдПрдВ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдореИрдВ рднреА 0.9.16 рдХреЗ рд╕рд╛рде рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдЪрд▓ рд░рд╣рд╛ рд╣реВрдБ рдЬреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдмрд╕реЗ рд╡рд░реНрддрдорд╛рди рд╕рдВрд╕реНрдХрд░рдг рд╣реИред рдпрд╣ рд╣реЛрдиреЗ рд╕реЗ рд░реЛрдХрдиреЗ рдХреЗ рдЖрд╕рдкрд╛рд╕ gdiz рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ? рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдордЭ рдирд╣реАрдВ рдЖрдпрд╛ред

omg ... рдореИрдВ рдпрд╣ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рдШрдВрдЯреЗ рдмрд┐рддрд╛рддрд╛ рд╣реВрдВ рдХрд┐ рдореЗрд░реЗ рдРрдк рдореЗрдВ рдХреНрдпрд╛ рдЧрдбрд╝рдмрдбрд╝ рд╣реИ, рдФрд░ рдХрдиреЗрдХреНрд╢рди рдЦреЛ рдЬрд╛рдиреЗ рдФрд░ рдирд╡реАрдиреАрдХрд░рдг рдХреЗ рдмрд╛рдж рд╕рд░реНрд╡рд░ рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рдмреАрдЪ рд╕рдВрджреЗрд╢реЛрдВ рдХреА рдирдХрд▓ рдХреНрдпреЛрдВ рд╣реЛрддреА рд╣реИ ...

0.9.16 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ

рдореИрдВ рдПрдХ рд╣реА рдлрд╛рдЗрд▓ рдиреЛрдб.рдЬреЗрдПрд╕ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреНрд▓рд╛рдЗрдВрдЯ рдФрд░ рд╕рд░реНрд╡рд░ рдХреЛрдб рдХреЗ рд╕рд╛рде рдПрдХ рдбрдмрд▓ рдХрдиреЗрдХреНрд╢рди рдЗрд╡реЗрдВрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ:

"use strict";
var server = require('socket.io');
var client = require('socket.io-client');

setTimeout(function () {
    var io = server.listen(8888);

    io.of('/chat').on('connection', function (socket) {
        console.log('Server: /chat connection');
    });

    io.sockets.on('connection', function (socket) {
        console.log('Server: connection');
    });
}, 2000);

var socketAddress = 'http://localhost:8888/chat';
var socket = client.connect(socketAddress);

socket.on('connect', function () {
    console.log("Client: connect");
});

socket.on('error', function () {
    console.log("Client: error");
    socket.socket.reconnect();
});

рдХреБрдЫ рдЕрдЬреАрдм рдмрд╛рддреЗрдВ:

1) рдпрджрд┐ рдореИрдВ url рд╕реЗ "/ рдЪреИрдЯ" рдХреЛ рд╣рдЯрд╛рдХрд░ рдирд╛рдорд╛рдВрдХрд┐рдд рдХрдиреЗрдХреНрд╢рди рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рдореЗрдВ рдмрджрд▓ рджреЗрддрд╛ рд╣реВрдВ рддреЛ рдХреЗрд╡рд▓ рдПрдХ рдХрдиреЗрдХреНрд╢рди рдШрдЯрдирд╛ рд╣реИред

2) рдпрджрд┐ рдореИрдВ рддреБрд░рдВрдд рд╕рд░реНрд╡рд░ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рд╕реЗрдЯ рдЗрдиреНрдЯрд░рд╡рд▓ рд╕рдордп рдХреЛ рд╢реВрдиреНрдп рдореЗрдВ рдмрджрд▓ рджреЗрдВ, рдХреЛрдИ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдХрдиреЗрдХреНрд╢рди рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рд╣реИ рдФрд░ рдХреЗрд╡рд▓ рдПрдХ рдХрдиреЗрдХреНрд╢рди рдШрдЯрдирд╛ рд╣реИред

рдХрд┐рд╕реА рднреА рдХрд╛рдо рдХреЗ рдЖрд╕рдкрд╛рд╕ рдпрд╛ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╕реБрдзрд╛рд░?

рдПрдХ рд╣реА рдореБрджреНрджрд╛ рд░рд╣рд╛ред рдпрджрд┐ рд╕реЙрдХреЗрдЯ.io рд╕рд░реНрд╡рд░ рдЕрдирдкреЗрдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рджреЛ рдмрд╛рд░ рдлрд┐рд░ рд╕реЗ рдЬреЛрдбрд╝ рджреЗрддрд╛ рд╣реИ рддреЛ рдХреНрд▓рд╛рдЗрдВрдЯ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрджреЗрд╢ рдХреЛ рджреЛ рдмрд╛рд░ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЧреНрд░рд╛рд╣рдХ рдЕрдВрдд рдкрд░ рдореЗрд░реЗ рдорд╛рдпрдиреЗ рд░рдЦрддрд╛ рд╣реИред

рдореБрдЭреЗ 1.0.0-рдкреНрд░реА 2 рд░рд┐рд▓реАрдЬ рдХреЗ рд╕рд╛рде рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИред рдЬрдм рдореИрдВ рд╕реЙрдХреЗрдЯ рдХреЛ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реВрдВ рддреЛ рдореЗрд░реЗ рдкрд╛рд╕ рджреЛ "400 рдЦрд░рд╛рдм рдЕрдиреБрд░реЛрдз" рд╣реЛрддреЗ рд╣реИрдВред

рдЖрдЬ рдЗрд╕ рдкрд░ рдЧреМрд░ рдХрд░реЗрдВрдЧреЗ!

рдЖрдЬ рдЗрд╕ рдкрд░ рдЧреМрд░ рдХрд░реЗрдВрдЧреЗ!

рдпрджрд┐ рдЖрдкрдХреЛ рдЕрдзрд┐рдХ рд╡рд┐рд╡рд░рдг, рд▓реЙрдЧ рдпрд╛ рд╕реНрдХреНрд░реАрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддреЛ рд╕рдВрдХреЛрдЪ рди рдХрд░реЗрдВ! рдпрд╣ рд╣рд░ рдмрд╛рд░ рдирд╣реАрдВ рд╣реИред

рдХреНрд▓рд╛рдЗрдВрдЯ рдореЗрдВ рд╕реЙрдХреЗрдЯ.io.js 1.0.6 рдСрди рд▓рд╛рдЗрди 2755:

Request.prototype.create = function (isBinary, supportBinary) {
var xhr = this.xhr = new XMLHttpRequest ({рдПрдЬреЗрдВрдЯ: this.agent, xdomain: this.xd});
...
}

рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдЗрд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИ:
xhr.timeout = Manager._timeout рдХрд╛ рдЙрджрд╛рд╣рд░рдг - 10 рдПрдордПрд╕
рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЖрдк рдХреНрд▓рд╛рдЗрдВрдЯ рд╕рд╛рдЗрдб рдкрд░ рдХрдИ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЙрдХреЗрдЯ рдирд┐рд░реНрдорд╛рдг рдХреЛ рд░реЛрдХрддреЗ рд╣реИрдВред
рд╕рд░реНрд╡рд░ рдХреА рдУрд░ рд╕реЗ рдХрдИ рд╕реЙрдХреЗрдЯреНрд╕ рджрд┐рд▓ рдХреА рдзрдбрд╝рдХрди рдХрд╛ рд╕рдордп рд╕рдорд╛рдкреНрдд рдХрд░ рджреЗрдВрдЧреЗред

рдореВрд▓ рд╕реЙрдХреЗрдЯ.рдЖрдИрдУ "рдЧреЗрдЯрд┐рдВрдЧ рд╕реНрдЯрд╛рд░реНрдЯреЗрдб" рдЙрджрд╛рд╣рд░рдг (http://socket.io/get-started/chat/) рдореЗрдВ рдпрд╣ рдбрдмрд▓ рд╕реЙрдХреЗрдЯ рдХрдиреЗрдХреНрд╢рди рд╕рдорд╕реНрдпрд╛ рд╣реИред

рдирд┐рдореНрди рдореЗрдВ рд╕реЗ рдПрдХ (рд╕рдВрднрд╛рд╡реНрдпрддрд╛ рдХреЗ рдмрдврд╝рддреЗ рдХреНрд░рдо рдореЗрдВ) рдПрдХрд▓ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЯреИрдм рдХрдиреЗрдХреНрд╢рди рд╕реЗ рдбрдмрд▓ рд╕реЙрдХреЗрдЯ рдХрдиреЗрдХреНрд╢рди рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рд╣реЛрддрд╛ рд╣реИ:
a) рдкрд╣рд▓реЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЯреИрдм рд╕реЗ рд╣реА рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ: 3000 рд╕реЗ рдЬреБрдбрд╝рдиреЗ рдкрд░
b) рдПрдХ рджреВрд╕рд░реЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЯреИрдм рд╕реЗ, рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ: 3000 рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдкрд░
рдЧ) рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХрдВрд╕реЛрд▓ рдХреЛ рдЦреБрд▓рд╛ рд░рдЦреЗрдВ (рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ: 3000)

рдЕрддрд┐рд░рд┐рдХреНрдд рдЕрд╡рд▓реЛрдХрди:

 io.on('connection', function(socket){
    console.log('a user connected: ' + socket.id);
    socket.on('disconnect', function(){
       console.log('a user disconnected');
       console.log(socket.nickname + ' has disconnected from the chat.');
    });
});
  1. рдПрдХрд▓ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЯреИрдм рдЕрдиреБрд░реЛрдз рд╕реЗ рджреЛ, socket.id рдЕрд▓рдЧ рд╣реЛрддреЗ рд╣реИрдВред
  2. "рдбреБрдкреНрд▓рд┐рдХреЗрдЯ" рд╕реЙрдХреЗрдЯ рдХрдиреЗрдХреНрд╢рди рдЦреБрдж рдХреЛ рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ рдХрд░рддрд╛ рд╣реИ, рдХрдВрд╕реЛрд▓ рдХреЗ рд╕рд╛рде рд▓рдЧрднрдЧ рдПрдХ рдорд┐рдирдЯ рдореЗрдВ "рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд" рдЪреИрдЯ рд╕реЗ рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ рд╣реЛ рдЧрдпрд╛ рд╣реИред
  3. рдПрдХреНрд╕рдкреНрд░реЗрд╕ рдЬрдирд░реЗрдЯрд░ 4.2 (рдореЙрд░реНрдЧрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдФрд░ рдлрд┐рд░ "рдЧреЗрдЯрд┐рдВрдЧ рд╕реНрдЯрд╛рд░реНрдЯ" рдЙрджрд╛рд╣рд░рдг рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛, "рдЕрдЪреНрдЫрд╛" рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХрдиреЗрдХреНрд╢рди рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдПрдХрд▓ рд▓рд╛рдЗрди рдЬреИрд╕реЗ "рдЧреЗрдЯ / 304 1ms" рдХреЗ рдПрдХреНрд╕рдкреНрд░реЗрд╕ рд▓реЙрдЧ рдореЗрдВ рд╣реЛрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЬрдм рднреА, рдпрд╣ "рдбрдмрд▓" рд╕реЙрдХреЗрдЯ рдХрдиреЗрдХреНрд╢рди рд╣реЛрддрд╛ рд╣реИ, рджреЛ рдПрдХреНрд╕рдкреНрд░реЗрд╕ рд▓реЙрдЧ рд╣реЛрддреЗ рд╣реИрдВ, "GET / 304 1ms" рдФрд░ "GET / 200 3ms - 386b"

рдореИрдВ рдореИрдХ, рдХреНрд░реЛрдо, рдПрдХреНрд╕рдкреНрд░реЗрд╕ 4.2 рдФрд░ рдирд╡реАрдирддрдо рд╕реЙрдХреЗрдЯ.рдЖрдИрдУ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

рджреЛ рд▓реЙрдЧ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рдмреАрдЪ рдПрдХ рд╕рдордп рдХрд╛ рдЕрдВрддрд░ рд╣реИред рдкрд╣рд▓рд╛ рд▓реЙрдЧ рддрдм рдирд┐рдХрд╛рд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм Chrome рдиреЗ "рд▓реЛ" рдХреЛ " рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ: 3000 " рдкрд░

рдореЗрд░реЗ рдкрд╛рд╕ "X рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЬреБрдбрд╝реЗ" рдХрдВрд╕реЛрд▓ рд▓реЙрдЧ рд╕рдВрджреЗрд╢ рдерд╛ рдФрд░ рдЬрдм рдореЗрд░рд╛ рдЦреБрдж рдХрд╛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ 2 рдпрд╛ 3 рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрдиреЗрдХреНрд╢рди рдиреЛрдЯрд┐рд╕ рдЯреНрд░рд┐рдЧрд░ рд╣реЛ рдЧрдпрд╛ рдерд╛ рддреЛ рдмрд╣реБрдд рдЧреБрд╕реНрд╕рд╛ рдЖ рд░рд╣рд╛ рдерд╛ред

рдЕрдм, рдореБрдЭреЗ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдореЗрд░реА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╣рд▓ рдХрдВрд╕реЛрд▓.рд▓реЙрдЧ рд▓рд╛рдЗрди рдкрд░ рдЯрд┐рдкреНрдкрдгреА рдХрд░ рд░рд╣рд╛ рдерд╛ред рд▓реЗрдХрд┐рди рдЕрдЪреНрдЫреЗ рдХрд╛рдо рдХрд░рддреЗ рд░рд╣реЛ, рджреЛрд╕реНрддреЛрдВред

рдореИрдВ рдЕрднреА рднреА рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рджреЗрдЦрддрд╛ рд╣реВрдВред рдЗрд╕ рдкрд░ рдХреЛрдИ рдЕрдкрдбреЗрдЯ?

рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ 1.0 рдХреЗ рд╕рд╛рде рднреА рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВ

рдмрд┐рд▓реНрдХреБрд▓ рдЗрд╕реЗ рдкреБрди: рдкреЗрд╢ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред рдХреНрдпрд╛ рдХреЛрдИ рдкреВрд░реНрдг рдЙрджрд╛рд╣рд░рдг рдкреЛрд╕реНрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИ?

рд╢реБрдХреНрд░ 14 рдирд╡рдВрдмрд░ 2014 рдХреЛ 2:44:50 рдмрдЬреЗ рд░реЗрдХреНрд╕ рдкрд╛рдЗрдХреНрд▓рд░ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com рдкрд░
рд▓рд┐рдЦрд╛ рдерд╛:

рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ 1.0 рдХреЗ рд╕рд╛рде рднреА рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВ

-
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рдЙрддреНрддрд░ рд╕реАрдзреЗ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/Automattic/socket.io/issues/474#issuecomment -62928229
ред

рдореИрдВ рджреЗрдЦреВрдВрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рдореИрдВ рдХрд▓ рдПрдХ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рдХреЛрдбрд╝рд╛ рдорд╛рд░ рд╕рдХрддрд╛ рд╣реВрдВред

рдореИрдВ рдЗрд╕реЗ рдкреБрди: рдкреЗрд╢ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред рдореИрдВ socket.io 1.3.5 рдФрд░ рдПрдХреНрд╕рдкреНрд░реЗрд╕ 4.12.4 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

рдореЗрд░рд╛ рдПрдХреНрд╕рдкреНрд░реЗрд╕ рдРрдк 127.0.0.1:3000 рдкрд░ рдмреИрдарддрд╛ рд╣реИ рдФрд░ рдореИрдВ рдЕрдкрдиреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЛ рдЦреЛрд▓рддрд╛ рд╣реВрдВ рдФрд░ рдЯрд╛рдЗрдк рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдЖрдИрдкреА рдПрдбреНрд░реЗрд╕ рдФрд░ рд╕реЙрдХреЗрдЯ.рдЖрдИрдУ рдХреЗрд╡рд▓ рдПрдХ рд╡реЗрдмрд╕реИрдЯ рдЦреЛрд▓рддрд╛ рд╣реИред

рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдбреЛрдореЗрди рд╣реИ рдЬреИрд╕реЗ abc.com рдФрд░ рдореИрдВ рдЗрд╕реЗ 127.0.0.1 рдкрд░ рдлреЙрд░рд╡рд░реНрдб рдХрд░рддрд╛ рд╣реВрдВред рдореИрдВ рдЕрдкрдиреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдкрд░ abc.com рдЦреЛрд▓рддрд╛ рд╣реВрдВ рдФрд░ index.html рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд▓рд╛рдЗрди рд╣реИ;

<script>
        var socket = io('http://localhost:3000/mysql');

        socket.on('processlist', function (data){
            console.log(data);
        });
</script>

рдпрд╣ 2 рд╡реЗрдмрд╕реНрдХреЗрдЯ рдЦреЛрд▓рддрд╛ рд╣реИред

рдореИрдВ рдЕрднреА рддрдХ рдкреНрд░реЙрдХреНрд╕реА рдХреЗ рд╕рд╛рде nginx рдХреА рдХреЛрд╢рд┐рд╢ рдирд╣реАрдВ рдХреА рд╣реИред рдореИрдВ рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реА рдЖрдкрдХреЛ рдмрддрд╛ рджреВрдВрдЧрд╛ред

screen shot 2015-05-29 at 23 53 29

рдЕрднреА рднреА рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рд╕рд╛рдордирд╛ред рдореЗрд░реЗ рд▓рд┐рдП рдпрд╣ рд╕рд░реНрд╡рд░ рд░рд┐рд╕реНрдЯрд╛рд░реНрдЯ рдкрд░ рд╣реБрдЖ - рдореИрдВ рд╕рд░реНрд╡рд░ рд╕реЗ рдЖрд░рдВрднрд┐рдХ рдХрдиреЗрдХреНрд╢рди рдЗрд╡реЗрдВрдЯ рдирд┐рдХрд╛рд▓рддреЗ рд╕рдордп рдЕрдкрдиреЗ рд╕реЙрдХреЗрдЯ.рдСрди ('рдореИрд╕реЗрдЬ') рдИрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рд╕рдВрд▓рдЧреНрди рдХрд░ рд░рд╣рд╛ рдерд╛, рдФрд░ рдпрджрд┐ рдХреНрд▓рд╛рдЗрдВрдЯ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ рддреЛ рдХреНрд▓рд╛рдЗрдВрдЯ рдЙрд╕ рдЗрд╡реЗрдВрдЯ рдХреЛ рдХрдИ рдмрд╛рд░ рдирд┐рдХрд╛рд▓рддрд╛ рд╣реИ (рдЕрдзрд┐рдХ рд╕рдордп рдЕрдм рдЧреНрд░рд╛рд╣рдХ рд╕рд░реНрд╡рд░ рдХреЗ рдкреБрдирдГ рдЖрд░рдВрдн рд╣реЛрдиреЗ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣рд╛ рдерд╛)ред

рдЕрдм рдХреЗ рд▓рд┐рдП рдореЗрд░рд╛ рдлрд┐рдХреНрд╕ рд╕реЙрдХреЗрдЯ рдИрд╡реЗрдВрдЯ рдХреЛ 'рдбрд┐рд╕рд╛рдЗрдб' рдХрд░рдирд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдХреЗрд╡рд▓ рдкрд╣рд▓реЗ рд╕рд░реНрд╡рд░ рдХрдиреЗрдХреНрдЯ рдкрд░ рд╣реЛрддрд╛ рд╣реИ, рдЬреИрд╕реЗ:

client.socketEventsAttached = false;

socket.on('connect',function(){
     if (!client.socketEventsAttached){
          attachSocketEvents();
     }
});

рдЖрдк рдЕрдкрдиреЗ рд╕рдВрджреЗрд╢ рдИрд╡реЗрдВрдЯ рд╢реНрд░реЛрддрд╛рдУрдВ рдХреЛ рднреА рд╕реЙрдХреЗрдЯ рдХреЗ рдмрд╛рд╣рд░ рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВред ('рдХрдиреЗрдХреНрдЯ') рд╢реНрд░реЛрддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ @gdiz рдХрд╛ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ред рдореИрдВрдиреЗ рдЕрднреА рдХреБрдЫ рдореБрджреНрджреЗ рд╕реЙрдХреЗрдЯ рдШрдЯрдирд╛рдУрдВ рдХреЗ рд╕рд╛рде рд╕рд░реНрд╡рд░ рдпрд╛ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐рдП рд╣реИрдВред

@bbcollinsworth рдХреНрд▓рд╛рдЗрдВрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреНрдпрд╛ рд╣реИ?

рдЕрднреА рднреА рддрд╛рдЬрд╛ рд╕реЙрдХреЗрдЯрд┐рдпреЛ рдФрд░ рдореВрд▓ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣рд╛ рд╣реИред

рдореИрдВ рдЕрднреА рднреА рдореВрд▓ рдЙрджрд╛рд╣рд░рдг рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдореБрдЭреЗ рдПрдХ рдареАрдХ рд▓рдЧрд╛, рд╣рд╛рд▓рд╛рдБрдХрд┐ рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рдЙрдЪрд┐рдд рд╣реИред рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рд╕рднреА рдХреЛ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ

io.once('connection', ...)

рдХреЗ рдмрдЬрд╛рдп

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

@brandonraphael рдХреНрдпрд╛ рдЖрдк рдХреГрдкрдпрд╛ рдЕрдкрдирд╛ рдореБрджреНрджрд╛ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП https://github.com/darrachequesne/socket.io-fiddle рдкрд░ рдЖрдзрд╛рд░рд┐рдд) рдФрд░ рдирдпрд╛ рдореБрджреНрджрд╛ рдЦреЛрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

рдХреЛрдИ рднреА рдЕрдкрдбреЗрдЯ рдпрд╣ рдЕрднреА рднреА рд╣реЛ рд░рд╣рд╛ рд╣реИ рдФрд░ рдРрдк рдореЗрдВ рд╕рдорд╕реНрдпрд╛рдПрдВ рдкреИрджрд╛ рдХрд░ рд░рд╣рд╛ рд╣реИ

рдпреЗ рд╣реИрдВ рд▓реЙрдЧ -
0 | Api рд╕рд░реНрд╡рд░ | рдЬреБрдбрд╝реЗ рд╣реБрдП!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! DKap3hUYFSpKBRr7AFgc 4351 2018-12-26 10:58:25
0 | Api рд╕рд░реНрд╡рд░ | рдЬреБрдбрд╝реЗ рд╣реБрдП!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! VS98DBFVTNF6ifzmAFgd 4351 2018-12-26 10:58:25

4351 рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЖрдИрдбреА рд╣реИ рдФрд░ рдХрдиреЗрдХреНрд╢рди рдХреА рд╕рдВрдЦреНрдпрд╛ рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рддрд░рд╣ рдорд╛рдорд▓реЗ рдореЗрдВ 2 рдХреА рддрд░рд╣ рд╕реНрдерд┐рд░ рдирд╣реАрдВ рд╣реИ 4351ред
рдПрдХ рдЕрдиреНрдп рд▓реЙрдЧ рдЙрд╕реА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ 6 рдХрдиреЗрдХреНрд╢рди рджрд┐рдЦрд╛рддрд╛ рд╣реИред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕рд░реНрд╡рд░ рдкрд░ рдЗрди рджреЛ рд╕реЙрдХреЗрдЯ рдЖрдИрдбреА рдХреА рдЬрд╛рдБрдЪ рдХреА рд╣реИ рдФрд░ рд╡реЗ рд╡реИрдз рджрд┐рдЦрд╛ рд░рд╣реЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдлреНрд░рдВрдЯрдПрдб рдХреЗрд╡рд▓ рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рд╕реБрдирдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИ рдЬреЛ рд╣рдореЗрд╢рд╛ рдкрд╣рд▓реА рд╕реЙрдХреЗрдЯ рдЖрдИрдбреА рд╣реИред

рдХреЛрдИ рдорджрдж рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред
рдЕрдЧреНрд░рд┐рдо рдореЗрдВ рдзрдиреНрдпрд╡рд╛рджред

рдореИрдВ рдЕрднреА рднреА рдореВрд▓ рдЙрджрд╛рд╣рд░рдг рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдореБрдЭреЗ рдПрдХ рдареАрдХ рд▓рдЧрд╛, рд╣рд╛рд▓рд╛рдБрдХрд┐ рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рдЙрдЪрд┐рдд рд╣реИред рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рд╕рднреА рдХреЛ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ

io.once('connection', ...)

рдХреЗ рдмрдЬрд╛рдп

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

рдЗрд╕рдХреЗ рд▓рд┐рдП рд╢реБрдХреНрд░рд┐рдпрд╛

рдХреНрд▓рд╛рдЗрдВрдЯ рдЕрдВрдд рдкрд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рдмрд╛рдж рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рд╣реЛ рдЧрдИред рдПрдХ рдФрд░ рдлрд┐рдХреНрд╕ рд╕рд┐рдВрдЧрд▓ рд╕реЙрдХреЗрдЯ рдЖрдИрдбреА рдХреЗ рдмрдЬрд╛рдп рдХрдорд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рд╣рд░ рд╕реЙрдХреЗрдЯ рдЖрдИрдбреА рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдХрдорд░рд╛ рд╣реИ рдЬрд┐рд╕реЗ рдмрджрд▓рд╛ рдЬрд╛рдирд╛ рдерд╛, рдЬреЛ рд╣рд░ рд╕реЙрдХреЗрдЯ рдЖрдИрдбреА рдХреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдХрдорд░реЗ рдореЗрдВ рд░рдЦрдиреЗ рдХреЗ рдирдП рдХрдиреЗрдХреНрд╢рди рдХреЛрдб рдХрд╛ рдерд╛ред
рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реНрд▓рдЧ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ User1 рддрдм рдПрдХ рдХрдорд░рд╛ User1 рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рд╕реНрд▓рдЧ User1 рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣рд░ рдирдП рд╕реЙрдХреЗрдЯ рдХрдиреЗрдХреНрд╢рди рдХреЛ User1 рдХрдорд░реЗ рдХреЗ рдЕрдВрджрд░ рд░рдЦрд╛ рдЧрдпрд╛ рдерд╛ред

рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рдереА рдФрд░ рдпрд╣ рдореБрдЭреЗ рдкрд╛рдЧрд▓ рдХрд░ рд░рд╣рд╛ рдерд╛ред рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЧреНрд░рд╛рд╣рдХ рдкрд░ рдШрдЯрдирд╛ рд╢реНрд░реЛрддрд╛рдУрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрдВрдЬреАрдХреГрдд рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рдерд╛ред рдореЗрд░реЗ рд╕реЗрдЯрдЕрдк рдореЗрдВ, рдореЗрд░реЗ рдкрд╛рд╕ рд╕реЙрдХреЗрдЯрд┐рдпреЛ рдПрдВрдбрдкреЙрдЗрдВрдЯ рдХреА рдореЗрдЬрдмрд╛рдиреА рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рдиреЛрдбрдЬ рд╕рд░реНрд╡рд░ рд╣реИ рдФрд░ рдореЗрд░реЗ рд╕реЙрдХреЗрдЯрд┐рдпреЛ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рдЕрдиреНрдп рдиреЛрдбрдЬ рд╕рд░реНрд╡рд░ рднреА рд╣реИред рдЪрд╛рд▓ рдЧреНрд░рд╛рд╣рдХ рдкрдХреНрд╖ рдХреЛ рд╡реЗрдмрд╕реИрдЯ рдкрд░рд┐рд╡рд╣рди рд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдФрд░ forceNode рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП

// client side
const socket = io('<url>', {
  transports: ['websocket'],
  forceNode: true,
});

рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рд╣реИ рдХрд┐ рдореИрдВ рдпрд╣ рдПрдХ рд╣реА рдореБрджреНрджрд╛ рд░рд╣рд╛ рд╣реВрдБред рдореИрдВ рдПрдХ рдЪреИрдЯ рд░реВрдо рдмрдирд╛ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдЬрдм рдХреЛрдИ рдХрдорд░реЗ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдореИрдВ "рдХрдорд░реЗ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛ рдЧрдпрд╛ рд╣реИ "рдХрдорд░реЗ рдореЗрдВ рд╕рдВрджреЗрд╢ред

рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдореИрдВ рдХрдорд░реЗ рдХреЛ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реВрдВ рдФрд░ рдлрд┐рд░ рджреВрд╕рд░реА рдмрд╛рд░ рджрд░реНрдЬ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдЗрдВрдЯреНрд░реЛ рд╕рдВрджреЗрд╢ _twice_ рдЙрддреНрд╕рд░реНрдЬрд┐рдд рд╣реЛрддрд╛ рд╣реИред рдпрджрд┐ рдореИрдВ рдХрдорд░реЗ рдХреЛ рдлрд┐рд░ рд╕реЗ рдЫреЛрдбрд╝рддрд╛ рд╣реВрдВ рдФрд░ рдЗрд╕реЗ рддреАрд╕рд░реА рдмрд╛рд░ рдлрд┐рд░ рд╕реЗ рджрд░реНрдЬ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдЗрдВрдЯреНрд░реЛ рд╕рдВрджреЗрд╢ рддреАрди рдмрд╛рд░ рдЙрддреНрд╕рд░реНрдЬрд┐рдд рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдЗрд╕реА рддрд░рд╣ред рдкреНрд░рддреНрдпреЗрдХ _reconnection_ рд╕реЗ _same_ рдХрдорд░реЗ рдореЗрдВ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдкрд░рд┐рдЪрдп рд╕рдВрджреЗрд╢ рдорд┐рд▓рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЕрдЧрд░ рдореИрдВ рдПрдХ _different_ рдХрдХреНрд╖ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдореБрдЭреЗ рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рдкрд░рд┐рдЪрдп рд╕рдВрджреЗрд╢ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИред

io.once('connection', ...) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рд░рдЧрд░ рдирд╣реАрдВ рд░рд╣рд╛ред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдореЗрд░реА рд╕рднреА рдШрдЯрдирд╛рдУрдВ рдиреЗ рдХрд╛рдо рдХрд░рдирд╛ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ред

"рдкрд░рд╛рдЬрдп" рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛ред рдлрд┐рд░, рдореЗрд░реА рдХреЛрдИ рднреА рдШрдЯрдирд╛ рднреА рджрд░реНрдЬ рдирд╣реАрдВ рд╣реБрдИред

рдЕрдВрдд рдореЗрдВ, forceNode: true рд╡рд┐рдХрд▓реНрдк рдЧреНрд░рд╛рд╣рдХ рдкрдХреНрд╖ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛ред

рдореИрдВ рд╕рд░реНрд╡рд░ рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рджреЛрдиреЛрдВ рдкрд░ 2.2.0 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдХреНрдпрд╛ рдореБрдЭреЗ рдХреБрдЫ рдпрд╛рдж рдЖ рд░рд╣рд╛ рд╣реИ?

рдореИрдВ рдЙрд╕реА рдореБрджреНрджреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪ рд░рд╣рд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЖрдЦрд┐рд░рдХрд╛рд░, рдЧреНрд░рд╛рд╣рдХ рдХреЛ рдХреЗрд╡рд▓ once рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣ рд░рд╣рд╛ рдерд╛ред

рдпрд╣рд╛рдБ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рд▓рд┐рдП рдореЗрд░рд╛ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рд╣реИ:

var socket = io.connect("http://localhost:3000/test", 
    { upgrade: false, transports: ['websocket'], reconnection: true, forceNew: false});
socket.once('connect', socketConn => {
    socket.on('message', data => {
        console.log(data);
    });
}); 

рдЧреНрд░рд╛рд╣рдХ рдХреЛ рдХреЗрд╡рд▓ once connect рдЗрд╡реЗрдВрдЯ рдХреЗ рд▓рд┐рдП рдкрдВрдЬреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдЗрд╕рдХреЗ рдЕрдВрджрд░ рдХрд┐рд╕реА рдЕрдиреНрдп рдШрдЯрдирд╛ рдХреЛ рдПрдХ рдмрд╛рд░ рдкрдВрдЬреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЕрдм рдЕрдЧрд░ рд╕рд░реНрд╡рд░ рдХреНрд░реИрд╢ рд╣реЛ рдЬрд╛рдПрдЧрд╛, рддреЛ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕рд┐рд░реНрдл рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдЧрд╛ рдФрд░ рдирдпрд╛ рдХрдиреЗрдХреНрд╢рди рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рдЬреИрд╕реЗ рд╣реА рдЗрд╕реЗ рд╕рд░реНрд╡рд░ рд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдорд┐рд▓реЗрдЧреА, рдпрд╣ рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрдЧрд╛ред

рддреЛ io.once рдХреЛ рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд╛рдЗрдб рдкрд░ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб рдкрд░ рдирд╣реАрдВред

рдореИрдВ рдХреНрд▓рд╛рдЗрдВрдЯ 2.1 рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдореЗрд░реЗ рджреЗрд╡ рджреВрдд рдореЗрдВ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИред рдЬрдм рднреА рдореЗрд░рд╛ рдиреЛрдб рд╕рд░реНрд╡рд░ рдкреБрдирд░рд╛рд░рдВрдн рд╣реЛрддрд╛ рд╣реИ (рдЙрджрд╛ред рдиреЛрдбрдореЙрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ) рдХреНрд▓рд╛рдЗрдВрдЯ рд╣рдореЗрд╢рд╛ рдХрдИ рд░реАрдХрдиреЗрдХреНрдЯ рдШрдЯрдирд╛ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░рддрд╛ рд╣реИ рддрдм рднреА рдХрдиреЗрдХреНрдЯ рд╣реЛрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕рдХрд╛ рдореВрд▓ рдХрд╛рд░рдг рдирд╣реАрдВ рдЬрд╛рди рд╕рдХрддрд╛

рдореИрдВ рдХреНрд▓рд╛рдЗрдВрдЯ 2.1 рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдореЗрд░реЗ рджреЗрд╡ рджреВрдд рдореЗрдВ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИред рдЬрдм рднреА рдореЗрд░рд╛ рдиреЛрдб рд╕рд░реНрд╡рд░ рдкреБрдирд░рд╛рд░рдВрдн рд╣реЛрддрд╛ рд╣реИ (рдЙрджрд╛ред рдиреЛрдбрдореЙрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ) рдХреНрд▓рд╛рдЗрдВрдЯ рд╣рдореЗрд╢рд╛ рдХрдИ рд░реАрдХрдиреЗрдХреНрдЯ рдШрдЯрдирд╛ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░рддрд╛ рд╣реИ рддрдм рднреА рдХрдиреЗрдХреНрдЯ рд╣реЛрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕рдХрд╛ рдореВрд▓ рдХрд╛рд░рдг рдирд╣реАрдВ рдЬрд╛рди рд╕рдХрддрд╛

рдореИрдВ рдПрдХ рд╣реА рдореБрджреНрджрд╛ рд╣реИ рдХрд┐ рдЦреБрдж рдХреЛ рднреА nodemon рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рдерд╛ред рд▓реЗрдХрд┐рди рдЕрдВрддрддрдГ, рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдХреЗрд╡рд▓ once рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣ рд░рд╣рд╛ рд╣реИред
рдКрдкрд░ рджрд┐рдП рдЧрдП рдореЗрд░реЗ рдЙрддреНрддрд░ рд╕реЗ рдХреЛрдб рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред рдЗрд╕рдиреЗ рдореЗрд░реА рдФрд░ рд╣рд░ рдмрд╛рд░ рд╕рд░реНрд╡рд░ рд░рд┐рд╕реНрдЯрд╛рд░реНрдЯ рд╣реЛрдиреЗ рдореЗрдВ рдорджрдж рдХреА, рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЛ рдирдП рдХрдиреЗрдХреНрд╢рди рдорд┐рд▓ рд░рд╣реЗ рд╣реИрдВред

рдореЗрд░реА рд╕рдорд╕реНрдпрд╛ рд╕рд░рд▓ рдереА

рдореЗрд░реЗ рдкрд╛рд╕ 2 рдЯреИрдм рдкрд░ рдПрдХ рд╣реА рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд╛рдЗрдб рдРрдк рдЦреБрд▓рд╛ рдерд╛ред рдЙрдлрд╝

рдореЗрд░реЗ рдкрд╛рд╕ рднреА рдпрд╣реА рдореБрджреНрджрд╛ рдерд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореЗрд░реЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдЧрд▓рддреА рд╕реЗ рдЕрдкрдиреЗ рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд╛рдЗрдб рд╣реИрдВрдбрд▓рд░ рдХреЛ socket.on('connection', cb) рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрджрд░ рдбрд╛рд▓ рджрд┐рдпрд╛ред

рдпрд╣рд╛рдБ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдирд┐рдкреЗрдЯ рд╣реИ:

client.js (рдиреЛрдб рдореЗрдВ)

const client = require('socket.io-client');
const socket = client('my_endpoint', {
  transports: [ 'websockets' ]
});

socket.on('connect', () => {
  console.log('connected');
  socket.on('myEvent', (message) => {
    console.log(`message: ${message}`);
  });
});

рдЬрдм рдПрдХ рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ рдФрд░ рдкреБрди: рдХрдиреЗрдХреНрдЯ рд╣реБрдЖ, рддреЛ рдпрд╣ socket.on('connect', cb) рдлрд┐рд░ рд╕реЗ рдХреЙрд▓ рдХрд░реЗрдЧрд╛, рдФрд░ myEvent рд╣реИрдВрдбрд▓рд░ рдЙрд╕реА рдирд╛рдо рдХреЗ рджреВрд╕рд░реЗ рд╣реИрдВрдбрд▓рд░ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░реЗрдЧрд╛ред рдЗрд╕рд▓рд┐рдП рдЬрдм рд╕рд░реНрд╡рд░ рдиреЗ myEvent рдлрд┐рд░ рд╕реЗ рдЙрддреНрд╕рд░реНрдЬрд┐рдд рдХрд┐рдпрд╛, рддреЛ рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рд╣реА рд╕рдВрджреЗрд╢ рдХреЗ рджреЛ рдХрдВрд╕реЛрд▓ рд▓реЙрдЧ рд╣реЛрдВрдЧреЗред

рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ connect рд╣реИрдВрдбрд▓рд░ рдХреЗ рдмрд╛рд╣рд░ рдЕрдкрдиреЗ рдЕрдиреНрдп рд╣реИрдВрдбрд▓рд░ рд▓рдЧрд╛рдиреЗ рдереЗред

const client = require('socket.io-client');
const socket = client('my_endpoint', {
  transports: [ 'websockets' ]
});

socket.on('connect', () => {
  console.log('connected');
});

socket.on('myEvent', (message) => {
  console.log(`message: ${message}`);
});

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореЗрд░реА рднреНрд░рдо рдХреИрд╕реЗ рдбреЙрдХреНрд╕ рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб рдбрд╛рд▓ рджрд┐рдЦрд╛рдиреЗ рд╕реЗ рдЖрдпрд╛ socket.on рдЕрдВрджрд░ рдШрдЯрдирд╛рдУрдВ connect рдШрдЯрдирд╛ред рдбреЙрдХреНрд╕ рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рдзреНрдпрд╛рди рд╕реЗ рди рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдореБрдЭ рдкрд░ рдпрд╣ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрд╛ рдХрд┐ рдореИрдВ рдЗрд╕реЗ рдпрд╣рд╛рдВ рдбрд╛рд▓реВрдВрдЧрд╛ рдЕрдЧрд░ рдХреЛрдИ рдФрд░ рдЧрд▓рддреА рдХрд░рддрд╛ рд╣реИред

рд╣рд╛рд▓рд╛рдВрдХрд┐, рднрд▓реЗ рд╣реА рдореИрдВрдиреЗ рдиреЛрдб рдореЗрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рджреЗрдЦрд╛ рдерд╛ред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рдпрд╣ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рднреА рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реЛрдЧреАред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕