2017-07-28 15 views
1

Wenn kein Raum angegeben ist, wird der Client die Nachricht erhalten, aber wenn ein Raum angegeben wird, kann ich keine Nachricht auf dem Client empfangen.socket.io Client empfängt keine Nachricht

server.js

var socket = require('socket.io'); 
var mysql = require('mysql'); 
const path = require('path'); 
var express = require('express'); 
var app = express(); 
var server = require('http').createServer(app); 
var io = socket.listen(server); 
var port = PORT; 
io.on('connection', (socket) => { 

    console.log('new connection made'); 

    socket.on('subscribe', function (room) { 
    socket.room = room; 
    socket.join(socket.room, function() { 
     console.log('joined:' + room); // outputs joined: 1 
     socket.on('send-message', (data) => { 
      io.to(data.room).emit('message-received', data.message); 
      console.log("sent to room:" + data.room); // outputs sent to room: 1 

     }); 
    }); 
    }); 
}); 

server.listen(port, function() { 
    console.log('Server listening at port %d', port); 
}); 

Client.js

this.socket = io.connect('ws://IP:PORT'); 

this.socket.on('connect',() => { 
    console.log("connection made"); // it output connection made in console 
    this.socket.emit('subscribe', 1); 
}); 
this.socket.on('message-received', (message: any) => { 
    console.log(message); 
}); 

auf server.js habe ich unter mehreren Optionen ausprobiert, aber noch nicht die Botschaft aufgenommen "auf Client-Seite zu emittieren:

// io.emit('message-received', data); 
// io.to(data.room).emit('message-received', { 
    // room: data.room, 
    // message: data.message 
// }); 
// io.sockets.in(data.room).emit('message-received', { 
// room: data.room, 
// message: data.message 
// }); 
//io.broadcast.to(data.room).emit('message-received', data.message); 

mit der neuesten socket.io-Bibliothek mit eckigen 4

Antwort

1

auf dem, was ich sehe auf dem Clientside und Serverside-Code, ich glaube, das Problem in dem Clientside-Code ist ...

auf Ihrem Server innerhalb der Veranstaltung ‚subscribe‘ der Server auch für ‚Send- hört Nachricht 'Ereignis, das Sie niemals von der Client-Seite aus senden !!

Deshalb, wenn Sie mit Daten 'send-message' Ereignis emittieren als Parameter (dies sollte Nachricht enthalten), nur dann der Server würde emittieren 'Nachricht aufgenommen' Ereignis an den Client ..

this helps !

Verwandte Themen