【问题标题】:socket.io - can't send messages to a spesific room in a socketsocket.io - 无法将消息发送到套接字中的特定房间
【发布时间】:2016-11-04 05:17:45
【问题描述】:

我正在尝试使用 socket.io + angular 创建一个聊天室网络应用程序。

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

但是,当我尝试将字符串发送到聊天中时,请求正在服务器端处理(控制台日志输出从服务器打印)但不在控制器上 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');
});

【问题讨论】:

  • 如果您需要帮助,您将需要比“它不起作用”更多的细节

标签: angularjs node.js socket.io


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    错误在这里 io.sockets.in(data.room).emit('聊天消息',data.msg);

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

    【讨论】:

    • so 而不是:io.sockets.in(data.room).emit('chat_message',data.msg);我应该写什么?
    • 你没有写chat_message 你写了chat(space)message
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-06
    • 1970-01-01
    • 1970-01-01
    • 2015-02-10
    • 2023-03-27
    • 1970-01-01
    相关资源
    最近更新 更多