特定端点上的Socket.io

时间:2017-06-15 15:40:07

标签: node.js sockets express

我正在学习如何使用Socket.io。我的网站建立在Node.js和express上。在这个网站上,我有很多观点。但是,我只想在一个特定视图/dashboard/stream上使用套接字。换句话说,如果有人访问/dashboard/stream,我只想打开套接字。我读到的所有文档都暗示我需要在Express中的应用程序级别配置套接字。换句话说,看起来它总是在开启。因此,如果有人使用我的网站,但从未访问过/dashboard/stream,则服务器上仍会运行套接字。

我错过了什么吗?有没有办法说“如果有人访问/dashboard/stream为用户激活套接字?”

感谢您帮助我明确这一点。

2 个答案:

答案 0 :(得分:1)

Socket.io需要访问支持表达的底层HTTP服务器对象。

所以最简单的形式,因为我确定您可能已经检查了文档,您使用类似的东西将socket.io Server连接到Express

var express = require('express');
var app = express();
var server = require('http').Server(app);
var io = require('socket.io')(server);

因此,它的设计是为了让您有效绑定它到http服务器,然后继续执行io.onio.emit以及所有这些操作。现在,只要你把实际绑定socket.io的代码放到哪里表达,我猜你可以把它放在你想要的任何地方,如果你不想要所有的初始设置,然后简单地定义你的socket.on在路由处理程序中的特定路由。

希望这有点帮助!

答案 1 :(得分:0)

在端点上实现侦听的正确方法是名称空间。

const nsp= io.of('/admin');

nsp.use((socket, next) => {
  // ensure the user has sufficient rights
  next();
});

nsp.on('connection', socket => {
  socket.on('delete user', () => {
    // ...
  });
});

https://socket.io/docs/v3/namespaces/#Custom-namespaces