繁体   English   中英

如何使socket.io仅监听一条特定的路由?

[英]How to get socket.io to only listen on one specific route?

我只想让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
});

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

客户端的Javascript要么连接到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连接。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM