2017-08-02 4 views
1

J'ai une application qui reçoit des messages d'un programme. Cette application reçoit les messages et diffuse à son tour les messages aux clients connectés. Maintenant, je suis l'affichage des messages sur la console et sur la console, cette application de réception reçoit parfaitement. Cependant sur le client (la page html), il n'est pas diffusé. Quand j'ouvre le localhost/result, rien n'est affiché. Qu'est-ce que je fais mal?node.js socket.io non diffusé aux clients connectés

var app = require('express')(); 
var http = require('http').Server(app); 
var io = require('socket.io')(http); 
var EventHubClient = require('azure-event-hubs').Client; 
var connectionString = 'connection string'; 

const bodyParser = require('body-parser') 

app.use(bodyParser.urlencoded({ extended: true })) 
app.use(bodyParser.json()) 

var printError = function (err) { 
    console.log(err.message); 
}; 

var result; 

var printMessage = function (message) { 
    console.log('Message received: '); 
    result = JSON.stringify(message.body); 
    obj = JSON.parse(result); 
    console.log('message:' + result) 

    console.log(''); 
}; 

count =0; 

app.get('/result', function(req, res){ 

    res.sendFile(__dirname + '/result.html'); 
}); 


io.on('connection', function(socket){ 
    console.log('user connected'); 

    socket.on('chat message', function(msg){ 

    io.emit('chat message', result); 
    console.log("This is id in the sock' section" + check_id); 
    }); 
    socket.on('disconnect', function(){ 
    console.log('user disconnected'); 
     socket.removeAllListeners('disconnect'); 
     io.removeAllListeners('connection'); 
    }); 
}); 

var client = EventHubClient.fromConnectionString(connectionString); 
client.open() 
    .then(client.getPartitionIds.bind(client)) 
    .then(function (partitionIds) { 
     return partitionIds.map(function (partitionId) { 
      return client.createReceiver('$Default', partitionId, {  'startAfterTime' : Date.now()}).then(function(receiver) { 
       console.log('Created partition receiver: ' + partitionId) 
       receiver.on('errorReceived', printError); 
       receiver.on('message', printMessage); 
      }); 
     }); 
    }) 
    .catch(printError); 


http.listen(3000, function(){ 
console.log('listening on *:3000'); 
}); 

result.html

<html> 
    <head><title>Hello world</title></head> 
    <script src="/socket.io/socket.io.js"></script> 
    <script> 
    var socket = io(); 
    // socket.emit('chat message') 


    socket.on('chat message',function(msg){ 

     socket.emit('chat message',msg); 
     document.write('hello world'); 
     document.write(msg); 
    }); 
    </script> 
</html> 
+0

Avez-vous essayé avec l'exemple refait? – EMX

+0

Ça marche bien. Mais pourquoi je ne comprends pas pourquoi cela fonctionne bien quand l'émission est déclenchée sur un clic de bouton et pas sur le chargement de document? – Neo

+0

car onload vous devez d'abord connecter le socket au serveur et configurer les gestionnaires socket-event des clients. Ensuite, à l'intérieur des clients sur 'connection' vous savez que la socket est maintenant connectée, donc à l'intérieur de cet évènement vous pouvez commencer à émettre. – EMX

Répondre

1

Je l'envoyer directement serait de la fonction printMessage:

function printMessage(message) { 
result = JSON.stringify(message.body); 
console.log('[message]',result); 
io.sockets.emit('chat message',result); 
} 

et souvenez-vous de modifier votre client (result.html) afin qu'il ne faire une boucle infinie:

<script> 
var socket=io(); 
socket.on('chat message',function(msg){ 
console.log(msg); //alert(msg); 
document.write(msg); 
}); 
</script> 

EDIT:

Comment allez-vous les incluez socket.io.js script?

<script src="/socket.io/socket.io.js"></script> 

Essayez et indiquez l'adresse du serveur socket.connect('localhost:3000');

I made this working example for you


RE-EDIT:I remade the working example for you, this time I added a client-server emission that bounces back to all connected clients.

+0

Ne fonctionne pas. Le fichier result.html n'affiche rien. – Neo

+1

Ajout d'un exemple de travail [gist] (https://gist.github.com/unknown0perator/50d6746cfddcb9c5c917b7baa6ae06b2) – EMX

+0

Merci pour la réponse mais cela ne semble toujours pas fonctionner. Quand je fais io.on ('connexion ...) et j'imprime quelque chose, ça marche. Cependant, quand je le fais, socket.on ('message de chat ...) ça ne marche pas. – Neo