socket.io让我感到困惑,如何通过我已经拥有的相同端口建立连接?

时间:2018-06-05 23:55:58

标签: javascript node.js socket.io

这是我的app.js文件,我不确定如何在其中使用socket.io并使其正常运行。任何帮助都会很棒!我已经尝试了几种不同的写法,但我认为问题在于我将端口用于其他事情。

我需要socket.io,然后在下面使用它,但我收到了错误。

const express = require('express');
const path = require('path');
const hbs = require('hbs');
const socket = require('socket.io');

const methodOverride = require('method-override');
const flash = require('connect-flash');
const session = require('express-session');
const bodyParser = require('body-parser');
const passport = require('passport');
const mongoose = require('mongoose');

const config = require('./config/config');

const app = express();

// Load routes
const main = require('./routes/main');
const users = require('./routes/users');

// Connect to mongoose
mongoose.connect(config.db.host, {
  // useMongoClient: true
}).then(() => console.log('MongoDB Connected...'))
  .catch((err) => console.log(err));


// Routes

// Use routes
app.use('/', main);
app.use('/users', users);

const port = process.env.PORT || 3000;

// Socket.io 

var io = socket(port);
function newConnection(socket){
  console.log(socket);
}

io.sockets.on('connection', newConnection);


app.listen(port, () => {
  console.log(`Server started on port ${port}`);
});

1 个答案:

答案 0 :(得分:2)

您可以通过将表达正在使用的同一服务器实例附加到socket.io

来共享同一端口
const express = require('express');
const app = express();

const server = require('http').Server(app);
const io = require('socket.io')(server); // Pass server to it instead of port

const port = process.env.PORT || 3000;
server.listen(port);

现在express和& socket.io将使用相同的服务器,因此共享端口。

您可以在socket.io documentation中查看相似的示例。

socket.io可以使用端口或http.Server实例,在使用前者时,将创建新的http.Server,从而无法使用相同的端口,如果你会尝试得到:

Error: listen EADDRINUSE :::${port}