Javascript Socket.io发出返回不同值的事件
我正在用socket.io制作一个应用程序。我试图在两个不同的网页中显示已连接用户的列表。这是我的密码- Server.js文件-Javascript Socket.io发出返回不同值的事件,javascript,node.js,sockets,Javascript,Node.js,Sockets,我正在用socket.io制作一个应用程序。我试图在两个不同的网页中显示已连接用户的列表。这是我的密码- Server.js文件- const express = require('express'); const ejs = require('ejs'); const app = express(); app.set('view engine','ejs'); app.use(express.static('public')); server = app.listen(3000,func
const express = require('express');
const ejs = require('ejs');
const app = express();
app.set('view engine','ejs');
app.use(express.static('public'));
server = app.listen(3000,function(){
console.log("Server running");
});
const io = require('socket.io')(server);
var users = [];
io.on('connection',function(socket){
socket.on('new-user',function(name){
users.push(name);
io.sockets.emit('user-connected',users);
});
socket.on('fetch-user-list',function(){
io.sockets.emit('user-list',users);
})
});
现在我有两个HTML文件,每个文件链接到不同的js文件-
file1.js-
var socket = io.connect();
const name = prompt('What is your name?');
socket.emit('new-user',name);
container = document.getElementById('container');
socket.on('user-connected',function(users){
container.innerHTML = '';
users.forEach(element => {
const listElement = document.createElement('li');
listElement.innerText = element;
container.append(listElement);
});
});
因此,这将在其连接的HTML页面中打印出所有连接的用户,并且是所需的输出
但是当我尝试再次使用server.js中的users数组作为第二个js文件时,就像这样-
file2.js-
var socket = io.connect();
socket.emit('fetch-user-list');
container = document.getElementById('container');
socket.on("user-list",function(users){
console.log(users);
});
我得到一个空的用户数组。套接字事件是特定于页面的吗?在离开第一页后,我的用户数组会被重置为空数组吗?任何帮助都将不胜感激
注意:-第二个js文件在第一个js文件之后执行。您在每个文件1和文件2中进行单独的套接字连接,因此在不同的页面上会有不同的数据。啊,我明白了。我是否可以在我的所有页面中使用同一个套接字实例?重用单个套接字实例,这样就不需要重新连接它。导出套接字变量。您在每个文件1和文件2中进行单独的套接字连接,因此在不同的页面上会有不同的数据。啊,我明白了。我是否可以在我的所有页面中使用同一个套接字实例?重用单个套接字实例,这样就不需要重新连接它。导出套接字变量。