【问题标题】:Socket IO emitting multiple times (equal to number of clients connected) using sails js使用sails js多次发出套接字IO(等于连接的客户端数)
【发布时间】:2013-08-28 07:15:40
【问题描述】:

我正在尝试使用sails MVC 开发一个简单的基于socket io 的聊天应用程序。 每当客户端连接套接字发出多次(等于客户端数量)。 这是我的代码。

服务器:

io=req.socket.manager;
var users=[];

io.sockets.on('connection', function(client) {
    console.log("connected");

    users.push(client.id);
    client.on("chat", function(data) {
        io.sockets.sockets[data.to].emit("chat", { from: client.id, to: data.to, msg: data.msg });
        client.emit("chat", { from: client.id, to: data.to, msg: data.msg });
    });
});

客户:

var socket=new io.connect('http://localhost:1337/');
socket.request('/Chat/index');
socket.emit('connection',function(data){
    console.log(data);
});
socket.on('connect', function() {
    console.log("Connected.");
    //
});
socket.on('chat', function(data) {
    console.log(data.msg );
});

请帮帮我,有没有办法在帆中获得实际的套接字对象? 我正在使用 io=req.socket.manager;这是req对象。

【问题讨论】:

    标签: node.js socket.io sails.js


    【解决方案1】:

    socket 对象应该可以在服务器端的sails.io 中访问

    link

    【讨论】:

    • 嗯...我认为这不是问题,实际上上面的代码在函数调用 (req,res) 内...所以每次我提出新请求时,它都会增加听众,它发出的次数与没有客户端的次数一样多。但我没有找到解决这个问题的方法
    【解决方案2】:

    也许您想回复一个独特的socket id?可以通过这种方式实现:

    在文件sockets.jsconfig 文件夹中,找到onConnect 属性并添加如下代码:

    onConnect: function(session, socket){
    
        sails.io.sockets.socket(socket.id).send('YOUR_EVENT', {'message' : 'your message to a unique socket'}); 
        }
    

    当建立新连接时,它将发送一条独特的消息。只是几个注意事项:

    • 这可以被认为是 socket.io 问题,而不是sails 问题,因为方法 .socket(socket.id) 是 socket.io 的一部分
    • 这是在sails v0.9.8 上测试的,在其他版本中,文件sockets.js 可能不会包含在使用sails 的new 命令生成的默认应用程序中
    • 这只是一个展示如何完成的示例,您可能需要根据自己的需要对其进行调整。

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 2021-09-14
      • 2012-02-06
      • 1970-01-01
      • 2017-12-10
      • 1970-01-01
      • 1970-01-01
      • 2021-09-30
      • 2015-02-08
      • 2011-03-22
      相关资源
      最近更新 更多