Node.js – 在同一端口上使用Socket.io和Express

我需要重构这个节点的应用程序,所以socket.io和expression使用相同的端口,我可以部署它。 它目前的工作原理,但不会在Heroku上运行,除非一切都使用相同的端口。

var http = require('http'); var socket = require('socket.io'); var socketServer = http.createServer(app); var io = socket.listen(socketServer); var express = require('express'); var app = express(); var bodyParser = require('body-parser'); var path = require('path'); app.set('view engine', 'jade'); // parse application/x-www-form-urlencoded app.use(bodyParser.urlencoded({ extended: false })); // parse application/json app.use(bodyParser.json()); app.use(express.static(path.join(__dirname, 'public'))); var routes = require('./config/routes')(app, io); var timer = require('./server/timer')(app, io); var server = app.listen(process.env.PORT || 5000, function () { console.log('Server running on *:5000'); }); socketServer.listen(8000); 

我只是学习节点,所以任何关于重构的提示将非常感激。

编辑以匹配build议的解决scheme: (Express以这种方式工作,但它打破了socket.io)

 var express = require('express'); var app = express(); var serv = require('http').createServer(app); var io = require('socket.io').listen(serv); var bodyParser = require('body-parser'); var path = require('path'); app.set('view engine', 'jade'); // parse application/x-www-form-urlencoded app.use(bodyParser.urlencoded({ extended: false })); // parse application/json app.use(bodyParser.json()); app.use(express.static(path.join(__dirname, 'public'))); var routes = require('./config/routes')(app, io); var timer = require('./server/timer')(app, io); serv.listen(process.env.PORT || 5000, function () { console.log('Server running on *:' + (process.env.PORT || '5000')); }); 

这是控制台中的新错误:

socket.io-1.3.4.js:2 GET http:// localhost:8000 / socket.io /?user = Trey&EIO = 3&transport = polling&t = 1424902016787-2

它看起来像websockets失败,所以它回落到长期投票,这也是失败…

我认为这应该工作。

 var express = require('express') var app = express() var server = require('http').createServer(app) var io = require('socket.io')(server) server.listen(80); 

Heroku也有一些有用的信息: heroku dev info websockets