我使用Express4和指向路徑/
的路由器,並且該文件由名爲chat.js
的JS文件處理。每當有新的連接時,Socket.io連接不斷增加
我的IO對象已經綁定到app.io
,所以我chat.js
裏面我會用req.app.io
叫我Socket.IO,但問題是,我用它來使用socket.emit
和代碼只是正常工作,但現在如果我想與客戶端同步,則必須使用req.app.io.emit
。
而由於我使用req.app.io.emit
,我有連接不斷增加的問題。
index.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'));
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
您預期會發生什麼?該控制檯輸出表明連接,斷開,連接,連接,斷開和斷開 - 爲什麼這是錯的? –
正如您所看到的,我第一次連接到我的服務器時,它會一次性註銷'hello'和'bye',並且第二次連接到我的服務器時,它會註銷'hello'和'bye'兩次 –
哦,因爲對於每個'.get('/''你正在添加另一個'req.app.io.on('connection',' –