socket.io client ne reçoit pas de messages à partir du serveur
Je suis en train de mettre en place un système avec deux clients, l'un d'eux envoie un message et l'autre doit le recevoir.
La figure ci-dessous va l'expliquer d'une façon plus visuelle:
Le client 1 envoyer le message au serveur (et ça fonctionne), le serveur reçoit un "push" message et émet un "pop" du message qui doit être récupéré par le Client 2.
Le problème ici est que le Client 2 reçoit jamais le "pop" du message. 🙁
Voici le code pour tous.
SERVER.JS
var app = require('express').createServer()
, io = require('socket.io').listen(app);
app.listen(999);
app.get('/webclient', function (req, res) {
res.sendfile(__dirname + '/web.html');
});
app.get('/mobile', function (req, res) {
res.sendfile(__dirname + '/mobile.html');
});
io.sockets.on('connection', function (socket) {
// socket.emit('pop', { hello: 'world' });
socket.on('push', function (data) {
console.log('push received, emitting a pop');
socket.emit('pop', { hello: 'world' });
});
});
CLIENT 1 ( aka mobile.html )
<html>
<head>
<title>
Mobile
</title>
<script src="/socket.io/socket.io.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/mootools/1.4.5/mootools-yui-compressed.js" type="text/javascript"></script>
<script>
var socket = io.connect('http://localhost:999');
</script>
</head>
<body>
<input type="button" name="act" id="push" value="message" />
<script type="text/javascript" charset="utf-8">
window.addEvent('domready', function() {
$('push').addEvent('click', function() {
socket.emit('push', { hello: 'world' });
});
});
</script>
</body>
</html>
CLIENT 2 (aka web.html)
<script src = "/socket.io/socket.io.js"></script>
<script>
var socket = io.connect('http://localhost:999');
socket.on('pop', function (data) {
console.log(data);
});
</script>
J'ai juste ne peut pas comprendre la raison pour laquelle le Client 2 ne reçoit pas le "pop" du message,
Je suis assez nouveau à douille.io et node.js en général, de sorte que certains de la mécanique me sont encore un peu obscures, donc je m'excuse d'avance pour mon noobness. 🙂
acclamations
-k-
- Je ne suis pas expérimenté avec la prise.io, mais si je ne me trompe pas
socket
va se référer à la même prise que vous avez reçu le message. Pourriez-vous essayerio.sockets.emit
à la place? - fonctionne comme un charme! si vous voulez faire une réponse que je peux marquer que correcte et vous obtenez un +1 🙂
- +1 pour une question intéressante, et a demandé et formaté
- merci, je suis content que cela a été utile à quelqu'un d'autre 🙂
Vous devez vous connecter pour publier un commentaire.
La fonction transmise à
.on
est appelée pour chaque socket pour effectuer l'initialisation (liaison d'événements, etc), etsocket
entend de la prise de courant. Ce client 1 lorsque vous recevez unpush
message, parce que la fonction de gestionnaire est lié à lapush
événement de cettesocket
- vous lié à cette fonction lorsque le client 1 connecté (oùsocket
fait référence client 1).io.sockets
se réfère à tous les sockets connectés, donc y compris le client 2 dans votre cas.Un autre aspect à prendre en considération est l'utilisation de :
socket.broadcast.emit('push', { hello: 'world' });
Qui aurait essentiellement pour effet d'envoyer le message à tous les clients connectés à l'exception de celui d'où provient le message. Retrait de la tâche de filtrage de clients ou de réduire le trafic inutile à l'origine de la prise.
Socket.IO sur GitHub - En vertu de la radiodiffusion.