Socket.io 在Vue SocketIO中动态加入房间

Socket.io 在Vue SocketIO中动态加入房间,socket.io,vuejs2,Socket.io,Vuejs2,我在前端使用Vue SocketIO,希望我的应用程序根据用户输入动态加入聊天室 这个功能在软件包中还不可用(作者一直在研究它),我想知道如何将它整合在一起 我正在主应用程序文件中设置SocketIO,如下所示: import VueSocketIO from 'vue-socket.io' import io from 'socket.io-client'; const token = window.localStorage.getItem('token'); const socketIns

我在前端使用Vue SocketIO,希望我的应用程序根据用户输入动态加入聊天室

这个功能在软件包中还不可用(作者一直在研究它),我想知道如何将它整合在一起

我正在主应用程序文件中设置SocketIO,如下所示:

import VueSocketIO from 'vue-socket.io'
import io from 'socket.io-client';

const token = window.localStorage.getItem('token');
const socketInstance = io(require('../config/web').socket_url, {
    transports: ['websocket', 'polling'],
    transportOptions: {
        polling: {
            extraHeaders: {
                Authorization: token
            }
        }
    }
});
Vue.use(new VueSocketIO({
    debug: true,
    connection: socketInstance,
    vuex: {
        store,
        actionPrefix: 'SOCKET_',
        mutationPrefix: 'SOCKET_'
    }
}));
在我的组件中,我尝试这样加入

selectSession () {
                console.log(this.$socket)
                // this.$socket.join(this.subscribedSession)
            }
由于此.$socket没有联接方法,因此失败


有人知道如何破解吗?

这不是
VueSocketIO
软件包的问题,甚至是
socket.io客户端的问题

vue.$socket
是一个
socket.io客户端
实例,因此具有本机客户端提供的所有功能

问题是您无法从客户端加入文件室,这是一个仅限于服务器端的功能

如果查看,您会发现客户机对象上没有
join
方法,这不是因为他们没有实现它,而是因为它在设计上不存在

那么我该怎么解决这个问题呢? 我很高兴你问

我建议创建一个名为
join
的服务器端处理程序,它将文件室名称作为参数,然后服务器将套接字连接到文件室中

const express = require("express");
const io = require('socket.io')(express());

io.on("connection", socket => {
  socket.on("join", roomName => {
    socket.join(roomName);
  }
};
然后,您可以从客户端使用:

socket.emit("join", "chatroom1");

注意:这可能是一个安全问题。

这不是
VueSocketIO
软件包甚至
socket.io客户端的问题。

vue.$socket
是一个
socket.io客户端
实例,因此具有本机客户端提供的所有功能

问题是您无法从客户端加入文件室,这是一个仅限于服务器端的功能

如果查看,您会发现客户机对象上没有
join
方法,这不是因为他们没有实现它,而是因为它在设计上不存在

那么我该怎么解决这个问题呢? 我很高兴你问

我建议创建一个名为
join
的服务器端处理程序,它将文件室名称作为参数,然后服务器将套接字连接到文件室中

const express = require("express");
const io = require('socket.io')(express());

io.on("connection", socket => {
  socket.on("join", roomName => {
    socket.join(roomName);
  }
};
然后,您可以从客户端使用:

socket.emit("join", "chatroom1");

注意:这可能是一个安全问题。

谢谢。但是,他们一开始打算如何让客户加入房间?也就是说,如果我的服务器在某些房间发出信号,我的客户机如何知道如何监听它们?您只需正常地监听服务器事件。房间只存在于服务器上,客户端不知道它们在房间中,他们不应该知道。你只需要像平常一样在客户端上听,让服务器管理谁获得哪些事件。如果你给我一个更具体的例子,我可以帮你更多。房间只是一个抽象的概念,可以帮助您管理客户体验。但是,他们一开始打算如何让客户加入房间?也就是说,如果我的服务器在某些房间发出信号,我的客户机如何知道如何监听它们?您只需正常地监听服务器事件。房间只存在于服务器上,客户端不知道它们在房间中,他们不应该知道。你只需要像平常一样在客户端上听,让服务器管理谁获得哪些事件。如果你给我一个更具体的例子,我可以帮你更多。房间只是一个抽象概念,可以帮助您管理客户