这是我的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}`);
});
答案 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}