从`socket`

时间:2018-01-11 16:21:11

标签: node.js websocket socket.io

在Socket.IO中,您可以使用以下内容向 * everyone * 发送消息:

const io = require("socket.io");
io.broadcast.emit("message", data);

您还可以使用类似的模式向 *除了一个人* 之外的所有人发送消息:

const io = require("socket.io");
io.on("connection", function(socket) {
    socket.on("message", function(msg) {
        socket.broadcast.emit("message", msg);
    });
});

这允许创建简单的聊天应用程序等

现在假设我在另一个文件中定义了套接字处理程序:

// index.js
const io = require("socket.io");
const handler = require("./handler.js");
io.on("connection", function(socket) {
    socket.on("message", handler);
});

// handler.js
module.exports = function(socket) {
    socket.broadcast.emit("message", msg);
}

在这种情况下,我想向所有人发送消息 - 包括发起消息的套接字。因此,给定socket,如何访问其父io对象?

我尝试了一些类似的事情:

socket.io.broadcast
socket.server.broadcast
socket.server.eio.broadcast
etc

但这些似乎都不起作用

1 个答案:

答案 0 :(得分:2)

如何将io传递给处理程序?最初处理程序函数会接受有效负载(处理程序中的msg)而不是套接字?

// index.js
const io = require("socket.io");
const handler = require("./handler.js");
io.on("connection", function(socket) {
    socket.on("message", data => handler(io, data) );
});

// handler.js
module.exports = function(socket, msg) { 
    socket.broadcast.emit("message", msg);
}