it-swarm.com.de

io.emit vs socket.emit

Ich bin neu bei socket.io und bin auf etwas gestoßen, das ziemlich seltsam erscheint. Ich kenne den Unterschied zwischen socket.emit und io.emit nicht wirklich, kann aber nirgends eine Erklärung finden.

io.on('connection', function(socket){
  io.emit('connected')  // <<<< HERE >> socket.emit('connected');
  socket.on('disconnect', function(){
    io.emit('disconnect')
  });
  socket.on('chat message', function(msg){
    io.emit('chat message', msg);
  });
});

server.listen(3000);

Wenn ich io in socket ändere, wird diese Meldung jedoch nur angezeigt, wenn der Benutzer, der sich verbindet, eine Verbindung herstellt. io.emit sendet die Nachricht an alle Benutzer.

Vielleicht soll es so sein oder es ist nur ein schrecklicher Hack? Lassen Sie mich wissen, wenn Sie das clientseitige HTML benötigen.

31
Manu

Hier ist eine ergänzende Dokumentation als Referenz.

socket.emit('message', "this is a test"); //sending to sender-client only
socket.broadcast.emit('message', "this is a test"); //sending to all clients except sender
socket.broadcast.to('game').emit('message', 'Nice game'); //sending to all clients in 'game' room(channel) except sender
socket.to('game').emit('message', 'enjoy the game'); //sending to sender client, only if they are in 'game' room(channel)
socket.broadcast.to(socketid).emit('message', 'for your eyes only'); //sending to individual socketid
io.emit('message', "this is a test"); //sending to all clients, include sender
io.in('game').emit('message', 'cool game'); //sending to all clients in 'game' room(channel), include sender
io.of('myNamespace').emit('message', 'gg'); //sending to all clients in namespace 'myNamespace', include sender
socket.emit(); //send to all connected clients
socket.broadcast.emit(); //send to all connected clients except the one that sent the message
socket.on(); //event listener, can be called on client to execute on server
io.sockets.socket(); //for emiting to specific clients
io.sockets.emit(); //send to all connected clients (same as socket.emit)
io.sockets.on() ; //initial connection from a client.

Hoffe das hilft!.

53
Kent Aguilar

Die Variable io repräsentiert die Gruppe von Sockets. Der Code, den Sie haben, beginnt in Zeile eins mit der Bereitstellung einer Funktion im zweiten Parameter, die Ihnen bei jeder neuen Verbindung eine Variable socket gibt. Die Variable socket dient nur zur Kommunikation mit jeder einzelnen Verbindung. Sie werden es möglicherweise nicht im Code sehen, aber es wird eine socket-Variable für jede hergestellte Verbindung vorhanden sein

28
kezi

Das ist eine gute Frage. Hier ist ein Beispielcode, der Ihre Frage beantworten könnte.

server.js code:

// Listener für eingehende Socket-Verbindungen 

io.on('connection', function(socket){
  socket.on('send', function(msg){
    console.log('message received/sending: ' + msg);
    io.sockets.emit('new', msg);
  });
});

index.html code

<body>
    <ul id="messages"></ul>
    <form action="">
        <input id="m" autocomplete="off" />
        <button type="submit">Send</button>
    </form>
    <script src="https://code.jquery.com/jquery-1.11.1.js"></script>
    <script src="https://cdn.socket.io/socket.io-1.4.5.js"></script>
    <script>
        var socket = io();
        function send(msg) {
            console.log("emitting: " + msg);
            socket.emit('send', { "message": msg });
        }

        socket.on('new', function (msg) {
            console.log("msg " + msg.message);
            $('#messages').append($('<li>').text(msg.message));
        });

        $(function () {
            $('form').submit(function (e) {
                e.preventDefault();
                send($('#m').val());
                $('#m').val('');
                return false;
            });
        });
    </script>
</body>

In index.html "socket.emit ('send', {" message ": msg});" Diese Codezeile sendet/sendet eine Nachricht an den Server, der darauf wartet, auf "socket.on ('send', function (msg) {" diese Codezeile in server.js) zu warten. Jetzt "io.sockets.emit (' new ', msg); "Diese Zeile von server.js sendet diese Nachricht an alle Sockets und wird Benutzern angezeigt, die ihren Listener in index.html verwenden. Dies ist" socket.on (' new ', function (msg) {").

Einfach gesagt: Jeder Socket sendet seine msg an den Server (io ist eine Instanz des Servers) und der Server sendet ihn wiederum an alle verbundenen Sockets. Auf diese Weise wird die von allen Benutzern gesendete Nachricht allen Benutzern angezeigt. Ich hoffe, es hilft!

0
Shama