【问题标题】:Socket io establishes 2 connection by the time i run the serverSocket io 在我运行服务器时建立了 2 个连接
【发布时间】:2025-12-19 18:25:11
【问题描述】:

这个简单应用程序的问题在于,从我在终端上运行 nodejs 程序的那一刻起,它就建立了 2 个连接。这意味着在浏览器的 5555 端口请求页面之前,程序会创建 2 个具有 2 个不同 id 的连接

服务器端

const express = require('express');
const path = require('path');
const bodyParser = require('body-parser');
const port = 5555 || process.env.PORT;
const http = require('http')
const options = {};
const cookie = require('cookie');

const app = express();
const server = http.createServer(app);

const io = require('socket.io')(server,options);
app.use(express.static(path.join(__dirname,'views')));
app.set('view engine','ejs');
app.set('views',path.join(__dirname,'views'));
app.use(express.urlencoded({ extended: true }));
let counter =0;
io.on('connection', socket =>{
    counter++;
    socket.on('private message', (anotherSocketId,msg)=>{
        socket.to(anotherSocketId).emit('private message',socket.id,msg);
    });

    console.log(`server socket id ${counter} : ${socket.id}`);
    console.log(`server client : ${socket.client}`);
    // console.log(`server ip of client : ${cookie.parse(socket.request.headers.cookie)}`);
});
app.get('/',(req,res)=>{
    res.render('index2');
})
server.listen(port,()=>{
    console.log(`listening on port : ${port}`);
})


控制台消息:

listening on port : 5555
server socket id 1 : snUlVUeYMoHL_6tuAAAB
server client : [object Object]
server socket id 2 : TLq1SFQ90H7VbMnbAAAD
server client : [object Object]

idk 如果重要,但我在客户端也有此代码

const socket = io();
        
        socket.on('connect',()=>{
            console.log(`client socket id : ${socket.id}`)
        })


【问题讨论】:

  • 启动服务器时,前端标签是否已经打开?
  • 是的,就是这样

标签: javascript node.js sockets websocket socket.io


【解决方案1】:

哈哈,我有点笨。我刚刚意识到我已经在浏览器上打开了 2 个 localhost:5555 选项卡,所以我想从服务器开始运行的那一刻起,无论是否刷新,都会与每个打开的选项卡建立连接

【讨论】: