如何让socket.io只听一条特定的路线?

时间:2018-06-06 02:08:54

标签: javascript node.js express socket.io

我只是想让socket.io在我的/ home路线上听,但它似乎在听每一条路线?有没有办法让它只听我/ home路线?这就是我所拥有的:

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

io.on('connection', function(socket){
  console.log('a user connected');
});

这是我尝试过的,但这只是在主路径上显示一个JSON文件

const io = require('socket.io')(3000, {
  path: '/home',
  serveClient: true,
  // below are engine.IO options
  pingInterval: 10000,
  pingTimeout: 5000,
  cookie: false
});

1 个答案:

答案 0 :(得分:2)

  

我只是想让socket.io在我的/ home路线上听,但它似乎在听每一条路线?有没有办法让它只听我/ home路线?

客户端的Javascript要么连接到socket.io服务器,要么连接到socket.io服务器 - 它是二进制文件。多个路由没有用,就像有http请求一样。如果您想为多个连接使用多个单独的连接“通道”,socket.io支持连接和侦听特定命名空间。

  

好的,所以它只是在网站加载时收听网站上的所有内容?如果它正在收听整个网站,我如何才能更改我的某个页面上的内容?或者这不会减慢速度吗?

socket.io服务器只是侦听传入的连接。它与路线无关。

要在socket.io上只连接一些页面,您可以在某些页面中使用不同的Javascript,或者使用常用的Javascript检查页面的路径,并仅在socket.io上连接特定的页面路径。

例如,您可以在您的网页中使用Javascript:

var socket;
if (window.location.pathname === "/home") {
     socket = io();
     socket.on(...);
}

这将允许您的常用Javascript(存在于许多页面中)仅在/home页面中创建socket.io连接。