Ik ben nieuw bij socket.io en ben iets tegengekomen dat nogal raar lijkt. Ik ken het verschil tussen socket.emit
en io.emit
eigenlijk niet, maar ik kan nergens een uitleg vinden.
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);
Dat zijn mijn serverdingen, maar als ik de io
naar socket
verander, wordt dat bericht alleen weergegeven wanneer de gebruiker die verbinding maakt, verbinding maakt. io.emit
stuurt het bericht naar alle gebruikers.
Misschien hoort het zo te zijn of is het gewoon een vreselijke hack? Laat het me weten als je de client-side HTML nodig hebt.
Antwoord 1, autoriteit 100%
Hier is een aanvullende documentatie ter referentie:
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.
Hopelijk helpt dit!.
Antwoord 2, autoriteit 23%
De variabele io
vertegenwoordigt de groep sockets. De code die je hebt begint op regel één met een functie in de tweede parameter die je een socket
-variabele geeft elke keer dat er een nieuwe verbinding wordt gemaakt. De variabele socket
is alleen voor communicatie met elke individuele verbinding. Je ziet het misschien niet in de code, maar er zal één socket
-variabele zijn voor elke tot stand gebrachte verbinding
Antwoord 3, autoriteit 6%
socket.emit
stuurt alleen een bericht terug naar de afzender,io.emit
zal
stuur een bericht naar alle klanten, inclusief de afzender- als je wilt verzenden
bericht naar iedereen, maar niet terug naar de afzender en vervolgenssocket.broadcast.emit
Antwoord 4
Dat is een goede vraag. Hier is een voorbeeldcode die uw vraag kan beantwoorden.
server.js-code:
// Luisteraar voor inkomende Socket-verbindingen
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.htmlsocket.emit('send', { "message": msg });
verzendt/zendt deze coderegel feitelijk een bericht naar de server die wacht om te luisteren op socket.on('send', function(msg){
deze regel code in server.js.
Nu io.sockets.emit('new', msg);
stuurt deze regel van server.jsdat bericht naar al zijn sockets en wordt weergegeven aan gebruikers die zijn luisteraar in index.htmldat is socket.on('new', function (msg) {
.
Simpel gezegd, elke socket verzendt zijn bericht naar een server (io is een instantie van server) en de server verzendt het op zijn beurt naar alle aangesloten sockets. Dat is hoe berichten die door een gebruiker zijn verzonden, aan alle gebruikers worden weergegeven. Ik hoop dat het helpt!