javascript - io.emit vs socket.emit



node.js sockets (2)

C'est une bonne question. Voici un exemple de code qui pourrait répondre à votre question.

code server.js:

// Listener pour les connexions Socket entrantes

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

code index.html

<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>

Dans index.html "socket.emit ('send', {" message ": msg});" cette ligne de code envoie / émet réellement un message au serveur qui attend pour écouter "socket.on ('send', function (msg) {" cette ligne de code dans server.js. Now "io.sockets.emit (' new ', msg); "cette ligne de server.js émet ce message vers tous ses sockets et est affichée aux utilisateurs utilisant son écouteur dans index.html c'est-à-dire" socket.on (' new ', function (msg) {".

Simplement dit, chaque socket émet son msg vers le serveur (io est une instance de serveur) et le serveur l’émet à son tour vers toutes les sockets connectées. C'est la manière dont msg envoyé par n'importe quel utilisateur est affiché à tous les utilisateurs. J'espère que ça aide!

https://ffff65535.com

Je suis nouveau sur socket.io et j'ai rencontré quelque chose qui semble assez étrange. Je ne connais pas vraiment la différence entre socket.emit et io.emit mais je ne trouve aucune explication nulle part.

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);

C'est mon serveur, mais quand je change le io message ne s'affiche que lorsque l'utilisateur qui se connecte se connecte. io.emit envoie le message à tous les utilisateurs.

Peut-être que c'est censé être comme ça ou peut-être que c'est juste un horrible hack? Faites-moi savoir si vous avez besoin du HTML côté client.


La variable io représente le groupe de sockets. Le code que vous avez commence sur la première ligne en fournissant une fonction dans le second paramètre qui vous donne une variable de socket chaque fois qu'une nouvelle connexion est établie. La variable de socket ne sert qu'à communiquer avec chaque connexion individuelle. Vous ne pouvez pas le voir dans le code, mais il y aura une variable de socket pour chaque connexion établie





socket.io