简体   繁体   中英

node.js socket.io not working with express

I've been having some issues implementing a simple chat applicaion with node.js and socket.io using express.

This is my index.js file:

var express = require('express');
var http = require('http').Server(express);
var router = express.Router();
var io = require('socket.io')(http);

/* GET home page. */
router.get('/', function(req, res, next) {
  res.render('index', { title: 'Express' });
});

/* Make the http server listen on port 3000. */
http.listen(3000, function(){
 console.log('listening on *:3000');
});

module.exports = router;

This does gives me this error:

listening on *:3000
Port 3000 is already in use

npm ERR! cc@0.0.0 start: `node ./bin/www`
npm ERR! Exit status 1
...

I have checked with "$ netstat -anp 2> /dev/null | grep :3000" and there seems to be nothing running on the port.

Secondly if I change the port number I get this in my console and I am unable to see that there is a socket connection or do anything with it:

listening on *:3010
GET /socket.io/?EIO=3&transport=polling&t=1422425200435-185 404 319.307 ms - 1136
GET /socket.io/?EIO=3&transport=polling&t=1422425205774-186 404 40.407 ms - 1136
GET /socket.io/?EIO=3&transport=polling&t=1422425210821-187 404 19.056 ms - 1136

Thanks.

I don't know if you are using express generator but I will assume you do.

To use the same port you have to create a new file (I named io.js)

var io = require('socket.io')();

io.on('connection', function (socket) {
  console.log("connected");
  socket.emit('news', { hello: 'world' });
});

module.exports = io;

And now in ./bin/www you have to add the following lines:

// After var app.
var io = require('../io');

...

// After server.on('listening', onListening); add:
io.attach(server);

With that everything will works fine.

:)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM