Socket.io: рдкреНрд░реЗрд╖рдХ рдореБрджреНрджреЗ рдХреЛ рдЫреЛрдбрд╝рдХрд░ рд╕рднреА рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╕рд╛рд░рдг

рдХреЛ рдирд┐рд░реНрдорд┐рдд 22 рдЬреВрди 2016  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: socketio/socket.io

рдореИрдВрдиреЗ socket.broadcast.emit() рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдиреНрдп рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдкреНрд░рд╕рд╛рд░рдг рдХрд░рддреЗ рд╕рдордп рдпрд╣ рдЕрдЬреАрдм рд╡реНрдпрд╡рд╣рд╛рд░ рджреЗрдЦрд╛ рд╣реИ
рдпрд╣рд╛рдБ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдирдореВрдирд╛ рдХреЛрдб рд╣реИ:

...notifyOtherClients = function(room, e, data, socket)
{
    // sending to all clients in a room except sender
    var transport = socket.broadcast.to(room);
    //
    setTimeout(function(){
        // #method1: this works as expected: all clients receive event except the sender
        socket.broadcast.to(room).emit(e, data);
        // #method2: this doesn't work though: all clients receive this event. Why?! Bug?
        transport.emit(e, data);
        // logs out 'true'
        console.log(transport === socket.broadcast.to(room));
    }, 
    1000);
};
...
notifyOtherClients("myRoom", "someEvent", { }, socket);

рдореБрдЭреЗ рдпрд╣рд╛рдВ рдХреНрдпрд╛ рд╕рдордЭ рдирд╣реАрдВ рдЖ рд░рд╣рд╛ рд╣реИ? рдХреНрдпреЛрдВ #method2 рдЕрдкреЗрдХреНрд╖рд╛ рдХреЗ рдЕрдиреБрд░реВрдк рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
рдзрдиреНрдпрд╡рд╛рджред

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

рдирдорд╕реНрддреЗ! socket.broadcast рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдЕрд╕реНрдерд╛рдпреА рдзреНрд╡рдЬ рдЬреЛрдбрд╝реЗрдВ (рдЕрд░реНрдерд╛рддреН, broadcast ) рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдЧрд▓реА рдмрд╛рд░ emit рдХреЛ socket рдкрд░ рдХреЙрд▓ рдХрд░рдиреЗ рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

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

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

socket.broadcast.to(room) рд╕реЗ рд░рд┐рдЯрд░реНрди рдХреНрдпрд╛ рд╣реИ?

@ рдореИрдб-рд╣реЗрдб рдбреЙрдХреНрд╕ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдПрдХ рд╣реА рд╕реЙрдХреЗрдЯ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдХреЛ рд▓рдЧрднрдЧ рд╕рднреА рдЕрдиреНрдп рддрд░реАрдХреЛрдВ рдХреА рддрд░рд╣ рджреЗрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдЪреЗрдирдмрд┐рд▓рд┐рдЯреА рдмрдирд╛рдП рд░рдЦреА рдЬрд╛ рд╕рдХреЗред
http://socket.io/docs/server-api/#socket #to(room:string):socket

рдордЬреЗрджрд╛рд░ рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдирд┐рд╢рд╛рди рд╕рдЪ рд╣реИ

console.log(transport === socket.broadcast.to(room));

рдирдорд╕реНрддреЗ! socket.broadcast рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдЕрд╕реНрдерд╛рдпреА рдзреНрд╡рдЬ рдЬреЛрдбрд╝реЗрдВ (рдЕрд░реНрдерд╛рддреН, broadcast ) рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдЧрд▓реА рдмрд╛рд░ emit рдХреЛ socket рдкрд░ рдХреЙрд▓ рдХрд░рдиреЗ рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

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

рдирдорд╕реНрддреЗ! рд╣рдореНрдо... рд╢рд╛рдпрдж рдореИрдВ рдкрд░реНрдпрд╛рдкреНрдд рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рдерд╛ред рдореБрдЭреЗ рдЗрд╕реЗ рдФрд░ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рджреЗрдВ:

рдирдореВрдирд╛1

    setTimeout(function(){
        // #method1: this works as expected: all clients receive event except the sender
        socket.broadcast.to(room).emit(e, data);
    }, 
    1000);

рдирдореВрдирд╛ 2

    var transport = socket.broadcast.to(room);
    setTimeout(function(){
        // #method2: this doesn't work though: all clients receive this event. Why?! Bug?
        transport.emit(e, data);
    }, 
    1000);

рддреЛ рдпрд╣ рдзреНрд╡рдЬ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдирд╣реАрдВ рд╣реИред рдКрдкрд░ рджрд┐рдП рдЧрдП рджреЛ рдирдореВрдиреЛрдВ рдХреЛ рд╕рдорд╛рди рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рд╡реЗ рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИ рдФрд░ рдореИрдВ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рджрд┐рди рдореЗрдВ 1/2 рдХреА рддрд░рд╣ рджреАрд╡рд╛рд░ рдХреЗ рдЦрд┐рд▓рд╛рдл рдорд╛рд░ рд░рд╣рд╛ рд╣реВрдВред

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

рдпрд╣ рдХреНрдпрд╛ рд╣реБрдЖ

1. setup a room with to()
2. start timeout for 1000 ms
...
[some where between 0 and 1000 ms] ping occurs i.e. emit() and flushes the room
...
3. timeout calls socket but the room's already flushed.
4. *problemo* all clients get notified including the sender socket.

рдЖрдкрдХреЗ рд╕реБрдЭрд╛рд╡ @darrachequesne рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд-рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рджред
рдЗрд╕реЗ рдмрдВрдж рдХрд░рдирд╛

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

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

thebinarypenguin picture thebinarypenguin  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

Elliot9 picture Elliot9  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдЬрдм рдЕрдиреБрд░реЛрдз рдХрд╛ рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓ рдореЛрдб 'рд╢рд╛рдорд┐рд▓' рд╣реЛ, рддреЛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ 'рдкрд╣реБрдВрдЪ-рдирд┐рдпрдВрддреНрд░рдг-рдЕрдиреБрдорддрд┐-рдЙрддреНрдкрддреНрддрд┐' рд╢реАрд░реНрд╖рд▓реЗрдЦ рдХрд╛ рдорд╛рди рд╡рд╛рдЗрд▓реНрдбрдХрд╛рд░реНрдб '*' рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЙрддреНрдкрддреНрддрд┐ 'http://localhost:3000' рдЗрд╕рд▓рд┐рдП рдкрд╣реБрдВрдЪ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реИред XMLHttpRequest рджреНрд╡рд╛рд░рд╛ рд╢реБрд░реВ рдХрд┐рдП рдЧрдП рдЕрдиреБрд░реЛрдзреЛрдВ рдХрд╛ рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓ рдореЛрдб withCredentials рд╡рд┐рд╢реЗрд╖рддрд╛ рджреНрд╡рд╛рд░рд╛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
akasrai picture akasrai  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

chfeizy picture chfeizy  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

karmac2015 picture karmac2015  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ