socket.broadcast.to(roomId).emit(' XXXXXX',数据);不在客户端工作

时间:2016-04-17 04:07:21

标签: angularjs node.js socket.io

客户端代码:

    var app = angular.module("msgApp", ['btford.socket-io']);
    app.factory('socket', function (socketFactory) {
         return socketFactory({
             prefix: '',
             ioSocket: io.connect('http://localhost:3000/messages')
         });

    });

    app.controller('mainCtrl',['$scope','socket',function($scope,socket){
        var room='asdf';
        socket.on('connect',function(){
            socket.emit('create',room);
        });

        socket.on('msg',function(data){
            console.log('received');
            $scope.msg=data;
        });

    }]);

服务器端代码:

    'use strict';
    var app = require('express')();
    var server = require('http').Server(app);
    var io = require('socket.io')(server);
server.listen(3000,err=>{
if(!err){
    console.log('app on 3k');
}
});

io.of('/orders').on('connection',(socket)=>{
socket.on('create',function(roomNo){
    console.log(roomNo);
    socket.join(roomNo);
    var roomNo = 'asdf';
socket.broadcast.to(roomNo).emit('msg','hi all');
})

})

我尝试建立此连接并创建'事件也在工作,但广播不起作用,客户端没有收到消息,请帮助我,无论问题是角度还是插座io。

1 个答案:

答案 0 :(得分:0)

当你这样做时:

dxdiag

您告诉服务器发送到socket.broadcast.to(roomNo).emit('msg','hi all'); 中除当前套接字之外的每个客户端。因此,该消息不会发送到当前套接字,而是发送到房间中的其他套接字。我设置了一个测试应用程序并验证了这是行为。

如果要广播到聊天室中的所有套接字,请使用:

roomNo

在你的服务器代码中,你也应该删除这一行,因为它不需要它,并且它与同名的参数冲突:

 io.to(roomNo).emit('msg','hi all');