Socket.IO命名空间

/ / Socket.IO命名空间

Socket.IO允许您"Namespaces命名"Socket,这实际上意味着分配不同的端点。这是一项有用的函数,可通过在通信通道之间引入分隔来最大程度地减少资源(TCP连接)的数量,并同时在您的应用程序内分隔关注点。多个命名空间实际上共享同一WebSockets连接,从而为我们节省了服务器上的Socket端口。

命名空间是在服务器端创建的。但是,客户端通过向服务器发送请求来加入它们。

默认命名空间

根名称空间"/"是默认名称空间,如果客户端在连接服务器时未指定名称空间,则默认名称空间由客户端加入。使用Socket对象客户端到服务器的所有连接均使用默认名称空间。如-

链接:https://www.learnfk.comhttps://www.learnfk.com/socket.io/socket.io-namespaces.html

来源:LearnFk无涯教程网

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

祝学习愉快! (发现内容有误?请选中要编辑的内容 -> 右键 -> 修改 -> 提交!帮助我们改进教程质量)

精选教程推荐

👇 以下精选教程可能对您有帮助,拓展您的技术视野

玩转AI创意写作 -〔于菁健〕

深入浅出可观测性 -〔翁一磊〕

快手 · 移动端音视频开发实战 -〔展晓凯〕

零基础入门Spark -〔吴磊〕

正则表达式入门课 -〔涂伟忠〕

TensorFlow 2项目进阶实战 -〔彭靖田〕

数据中台实战课 -〔郭忆〕

深入浅出云计算 -〔何恺铎〕

白话法律42讲 -〔周甲徳〕

📝 好记忆不如烂笔头,留下您的学习笔记吧!

暂无学习笔记,成为第一个分享的人吧!

您的笔记将帮助成千上万的学习者