gpt4 book ai didi

javascript - 每次建立新连接时,Socket.io 连接都会不断增加

转载 作者:行者123 更新时间:2023-11-30 15:15:28 25 4
gpt4 key购买 nike

我将 Express4 与指向路径 / 的路由器一起使用,并由名为 chat.js 的 JS 文件处理。

我的 IO 对象已经绑定(bind)到 app.io,所以在我的 chat.js 中,我将使用 req 调用我的 Socket.IO。 app.io,但问题是,我曾经使用 socket.emit 并且代码工作正常,但现在如果我想与客户端同步,我必须使用req.app.io.emit

因为我正在使用 req.app.io.emit,所以我的连接问题不断增加。


索引.js

const express = require('express');
const app = express();
const http = require('http');
const server = http.createServer(app);
const path = require('path');
const randomstring = require('randomstring');
const sha256 = require('sha256');
const io = require('socket.io').listen(server);
app.io = io;
const port = process.env.PORT || 3000;

module.exports.users = {};

server.listen(port, () => {
console.log(`Serer is running on port ${port}`);
});

app.set('view engine', 'ejs');
app.set('views', path.join(`${__dirname}/../public`));
app.use('/static', express.static(path.join(`${__dirname}/../public`)));


app.use('/', require('./chat'));

聊天.js

const express = require('express');
const router = express.Router();
const users = require('./index').users;
const randomstring = require('randomstring');
router.get('/', (req, res) => {
res.render('index');
const uid = randomstring.generate(30);
users[uid] = true;
req.app.io.on('connection', socket => {
console.log('hello');

socket.on('disconnect', () => {
console.log('bye');
});

});
});

module.exports = router;

日志(图片)

Serer is running on port 3000
hello
bye
hello
hello
bye
bye

最佳答案

每次您的 / 路由被命中时,您都会创建一个新的副本 io.on('connection', ...) 事件处理程序。因此,在该路由被命中 3 次之后,您有 3 个用于 connection 事件的事件处理程序。因此,当它发生时,您的代码会被调用 3 次。

相反,您应该只在路线外执行一次 io.on('connection', ...)


仅供引用,您似乎没有对正在创建的 uid 做任何有用的事情,因为您没有将它与任何特定连接相关联。仅供引用,每个 socket.io 连接都有一个唯一的 socket.id,它与每个 socket.io 连接唯一关联,因此您可以从套接字获取 id 或仅在给定 id 的情况下检索套接字.

关于javascript - 每次建立新连接时,Socket.io 连接都会不断增加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44534393/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com