客户端代码:
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 :(得分:0)
当你这样做时:
dxdiag
您告诉服务器发送到socket.broadcast.to(roomNo).emit('msg','hi all');
中除当前套接字之外的每个客户端。因此,该消息不会发送到当前套接字,而是发送到房间中的其他套接字。我设置了一个测试应用程序并验证了这是行为。
如果要广播到聊天室中的所有套接字,请使用:
roomNo
在你的服务器代码中,你也应该删除这一行,因为它不需要它,并且它与同名的参数冲突:
io.to(roomNo).emit('msg','hi all');