Socket.IO允许您"Namespaces命名"Socket,这实际上意味着分配不同的端点。这是一项有用的函数,可通过在通信通道之间引入分隔来最大程度地减少资源(TCP连接)的数量,并同时在您的应用程序内分隔关注点。多个命名空间实际上共享同一WebSockets连接,从而为我们节省了服务器上的Socket端口。
命名空间是在服务器端创建的。但是,客户端通过向服务器发送请求来加入它们。
默认命名空间
根名称空间" /"是默认名称空间,如果客户端在连接服务器时未指定名称空间,则默认名称空间由客户端加入。使用Socket对象客户端到服务器的所有连接均使用默认名称空间。如-
var socket=io();
这会将客户端连接到默认名称空间,此名称空间连接上的所有事件将由服务器上的 io对象处理,前面的所有示例都利用默认名称空间与服务器进行通信并返回。
自定义命名空间
我们可以创建自己的自定义名称空间,要设置自定义名称空间,我们可以在服务器端调用" of"函数-
var app = require('express')(); var http = require('http').Server(app); var io = require('socket.io')(http); app.get('/', function(req, res) { res.sendfile('index.html'); }); var nsp = io.of('/my-namespace'); nsp.on('connection', function(socket) { console.log('someone connected'); nsp.emit('hi', 'Hello everyone!'); }); http.listen(3000, function() { console.log('listening on localhost:3000'); });
现在,要将客户端连接到该名称空间,您需要提供名称空间作为 io构造函数调用的参数,以在客户端创建连接和Socket 对象 。
如,要连接到上述名称空间,请使用以下HTML-
<!DOCTYPE html> <html> <head> <title>Hello Learnfk</title> </head> <script src="https://cdn.jsdelivr.net/npm/socket.io-client@2/dist/socket.io.js"></script> <script> var socket=io('/my-namespace'); socket.on('hi',function(data) { document.body.innerHTML=''; document.write(data); }); </script> <body></body> </html>
每当有人连接到该命名空间时,他们都会收到" hi"事件。
learnfk:TestSocket learnfk$ nodemon app.js
[nodemon] 2.0.4
[nodemon] to restart at any time, enter `rs`
[nodemon] watching path(s): *.*
[nodemon] watching extensions: js,mjs,json
[nodemon] starting `node app.js`
listening on localhost:3000
someone connected
express deprecated res.sendfile: Use res.sendFile instead app.js:6:8
someone connected
参考链接
https://www.learnfk.com/socket.io/socket.io-namespaces.html
标签:socket,IO,无涯,名称,io,空间,客户端,Socket From: https://blog.51cto.com/u_14033984/9445755