socket.io客户端没有收到消息

当没有指定的房间客户端收到消息,但指定一个房间时,我无法在客户端上接收消息。

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); }); 

在server.js我已经尝试了以下几个选项,但仍然无法在客户端发出“消息接收”:

 // 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); 

使用angular度为4的最新socket.io库

基于我在你的客户端和serverSide代码看到的,我相信问题是在clientSide代码…

在您的服务器上,在'subscribe'事件中,服务器也在监听'send-message'事件,这是你永远不会从客户端发出的!

因此,如果用数据(这应该包括消息)作为参数发送“发送消息”事件,则只有服务器将发送“消息接收”事件给客户端。

希望这可以帮助!