本文详解在 Node.js 中使用 Socket.IO 创建命名空间的方法。通过 io.of 接口,开发者可将不同业务逻辑隔离至独立通道,如 /chat 与 /news。文章提供服务器端监听配置与客户端连接示例,展示如何利用命名空间实现多场景下的消息收发与事件处理,确保通信的独立性与可控性。
Socket.IO 命名空间概述
在 Socket.IO 应用中,若开发者仅需对单一应用内的消息与事件发送进行完全控制,使用默认的“/”命名空间即可满足需求。然而,当应用程序需作为第三方服务向其他应用开放时,必须为客户端连接定义独立的命名空间,以实现通信隔离。
实现命名空间的核心方法是调用 `io.of(namespace)`。
下面将演示如何创建两个独立的命名空间。
具体场景为构建 `chat` 和 `news` 两个命名空间,并实现客户端在这两个空间内相互发送信息的功能。
服务器端命名空间配置
服务器端实现代码如下:
var express=require("express");
var http=require("http");
var sio=require("socket.io");
var app=express();
var server=http.createServer(app);
app.get("/", function (req,res) {
res.sendfile(__dirname+"/index.html");
});
server.listen(1337,"127.0.0.1", function () {
console.log("开始监听1337");
});
var io=sio.listen(server);
var chart=io.of("/chat").on("connection", function (socket) {
socket.send("欢迎访问chat空间!");
socket.on("message", function (msg) {
console.log("chat命名空间接收到信息:"+msg);
});
});
var news=io.of("/news").on("connection", function (socket) {
socket.emit("send message","欢迎访问news空间!");
socket.on("send message", function (data) {
console.log("news命名空间接受到send message事件,数据为:"+data);
});
});
客户端连接与通信实现
客户端 HTML 及 JavaScript 代码如下:
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
<script src="/socket.io/socket.io.js"></script>
<script>
var chat=io.connect("http://localhost/chat"),
news=io.connect("http://localhost/news");
chat.on("connect", function () {
chat.send("你好.");
chat.on("message", function (msg) {
console.log("从char空间接收到消息:"+msg);
});
});
news.on("connect", function () {
news.emit("send message","hello");
news.on("send message", function (data) {
console.log("从news命名空间接收到send message事件,数据位:"+data);
});
});
</script>
</head>
<body>
</body>
</html>
运行结果展示:

通过上述两个简单示例,可以掌握在 Node.js 中利用 Socket.IO 创建命名空间的方法。读者可根据实际需求自由扩展应用逻辑。