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>
Avez-vous essayé avec l'exemple refait? – EMX
Ç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
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