socket.io - 无法将消息发送到套接字中的特定房间

时间:2016-07-01 17:58:27

标签: angularjs node.js socket.io

我正在尝试使用socket.io + angular来创建聊天室Web应用程序。

我有一个特定的文本框,用户在其中输入他想要连接的房间的名称。然后,我试图将这个用户连接到那个特定的房间并将他的所有消息发送到这个房间。

但是,当我尝试将字符串发送到聊天中时,请求正在服务器端处理(控制台日志输出从服务器打印),但不在控制器socket.on上(' chat_message',function(data)...)方法不会打印它的控制台日志。

我做错了什么?

代码如下。还有更多我认为不需要的代码(角度相关的东西)。

提前致谢

视图

<form ng-submit="submit()">
  <input autocomplete="off" ng-model="insertedText" type="text" />
  <button type="button" ng-click="submit()">
    Send
  </button>
</form>

控制器

mymodule.controller("cntrlChat", ['$scope', 'myService',
  function($scope, myService){ 
   var socket = io();
   $scope.messages = [];
   $scope.room= myService.get();
   socket.emit('room', $scope.room);

   $scope.submit=function(){
    socket.emit('chat_message',{ room: $scope.room, msg: $scope.user+": "+$scope.insertedText });
    $scope.insertedText='';
    return false; 
  }

  socket.on('chat_message', function(data){
    console.log('room-->'+data.room+' msg---->'+data.msg );
    $scope.$apply(function() {
      $scope.messages.push(data.msg);

    });
  });

}]);

服务器

var express = require('express');
var app = express();
var http = require('http').Server(app); 
var io = require('socket.io')(http);

app.use(express.static(__dirname + '/'));

app.get('/', function(req, res){
    res.sendFile(__dirname + '/index.html');
});

io.on('connection', function(socket){
io.emit('chat_message', "welcome");

socket.on('room', function(room) {
    socket.join(room);
});

socket.on('chat_message', function(data){
    console.log("room---->"+data.room, "msg---->"+data.msg);
    io.sockets.in(data.room).emit('chat message',data.msg);
});


socket.on('disconnect', function(){
    io.emit('chat message', "Bye");

});

});

http.listen(3000, function(){
    console.log('listening on *:3000');
});

2 个答案:

答案 0 :(得分:1)

错误在这里    io.sockets.in(data.room).emit('chat message',data.msg);

它应该是     io.sockets.in(data.room).emit( 'chat_message',data.msg);

答案 1 :(得分:1)

您从服务器发出chat message并等待客户端上的chat_message。仔细看,一个是下划线,另一个是空格。

这可能只是一个拼写错误。

避免在邮件标签中使用空格和特殊字符。