2016-04-17 4 views
0

клиентского кода на сторону:socket.broadcast.to (roomId) .emit ('xxxxxx', data); не работает на стороне клиента

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.

ответ

0

Когда вы делаете:

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

Вы сообщаете сервер для отправки к каждому клиенту, который находится в roomNo, за исключением текущего сокета. Таким образом, это сообщение не будет отправлено в текущий сокет, а в другие сокеты в комнате. Я настроил тестовое приложение и подтвердил, что это поведение.

Если вы хотите транслировать на все розетки в комнате чата, а затем использовать:

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

В коде сервера, вы должны также удалить эту линию, так как она не нужна, и он вступает в противоречие с аргумент с тем же именем:

var roomNo = 'asdf'; 
+0

О, как я пропустил это. Спасибо, друг .. – karthik

Смежные вопросы