【问题标题】:socket io - Emitting message to individual socketsocket io - 向单个套接字发送消息
【发布时间】:2013-04-16 02:37:54
【问题描述】:

它最初是一个 lynda.com 教程项目

我已经尝试过并且尝试过来让它工作。我希望能够向特定聊天成员发送消息(向一个套接字发送消息)。

我看了这个,仍然无法让我的工作。 Socket.IO - how do I get a list of connected sockets/clients?

我已经尽可能多地删掉了不属于这个问题的内容。

第一个文件:

var io = require('socket.io'), connect = require('connect'), chatter = require('./chatter.js');

var app = connect().use(connect.static('public')).listen(process.env.PORT || 3000);
var chatRoom = io.listen(app);

chatter.setSockets(chatRoom.sockets);

chatRoom.sockets.on("connection", function(socket){
 chatter.connectChatter({
  socket: socket,
  username: socket.id
 });
});

第二个文件:

     var allSockets = null;
        var members = [];

        exports.setSockets = function(sockets){
         allSockets = sockets;
        }

        exports.connectChatter = function(config){
         var exists = false;
         var self;
         for(var i = 0; i < members.length; i++){
          if(members[i].userName == config.username){
           exists = true;
           break;
          }
         }
         if(!exists){
          self = {userName:config.username};
          members.push(self);
         }

         config.socket.emit("welcome",{user:self});
         allSockets.emit("getUsers",{users:members});

        config.socket.on("chat", function(data){

    allSockets.emit("chat", {message:data.message}); //works just fine
             sockets[socket].emit("chat", {message:data.message}); //WILL NOT WORK
             sockets[0].emit("chat", {message:data.message}); //WILL NOT WORK
             socket[0].emit("chat", {message:data.message}); //WILL NOT WORK
             allSockets[socket].emit("chat", {message:data.message}); //WILL NOT WORK
             allSockets[0].emit("chat", {message:data.message}); //WILL NOT WORK

             allSockets.socket(0).emit('chat', {message:data.message}); //DOES NOTHING, BUT DOES NOT BREAK APP

请帮忙。我敢肯定这是愚蠢或愚蠢的事情。我对此很陌生。我只是不知道语法是什么。

【问题讨论】:

  • 当我执行 console.log 时,我得到了 sockets: [Circular] 作为它的一部分。
  • console.log(allSockets.manager.sockets.manager.sockets.manager.sockets.manager.sockets);与 console.log(allSockets.manager.sockets); 是一样的这对我来说没有任何意义。永无止境的循环

标签: jquery sockets socket.io emit


【解决方案1】:

好的,让它工作。不知道为什么 Lynda.com 采用这种编码布局,而其他人似乎只是使用 io.sockets.socket 样式。

第一个文件:

var io = require('socket.io'), connect = require('connect'), chatter = require('./chatter.js');

var app = connect().use(connect.static('public')).listen(process.env.PORT || 3000);
var chatRoom = io.listen(app);

chatter.setSockets(chatRoom.sockets);

chatRoom.sockets.on("connection", function(socket){
chatter.addSocket(socket);
 chatter.connectChatter({
  socket: socket,
  username: socket.id
 });
});

第二个文件:

var socketList = [];
exports.addSocket = function(s){
 socketList.push(s);
}

var allSockets = null;
        var members = [];

        exports.setSockets = function(sockets){
         allSockets = sockets;
        }

        exports.connectChatter = function(config){
         var exists = false;
         var self;
         for(var i = 0; i < members.length; i++){
          if(members[i].userName == config.username){
           exists = true;
           break;
          }
         }
         if(!exists){
          self = {userName:config.username};
          members.push(self);
         }

         config.socket.emit("welcome",{user:self});
         allSockets.emit("getUsers",{users:members});

        config.socket.on("chat", function(data){
        socketList[0].emit("chat", {message:data.message});
}

希望这对将来的人有所帮助。

【讨论】:

  • 以防万一有人想知道,这还不是全部代码。这只是让 socketList[0].emit 函数在不破坏应用程序的情况下工作所必需的代码
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-14
  • 2020-11-12
  • 2018-05-16
相关资源
最近更新 更多