【发布时间】:2016-07-11 15:18:24
【问题描述】:
我的应用程序有一个快速服务器在一个端口 (process.env.PORT) 上侦听,我还想要一个使用另一个端口的 Web 套接字。我曾经在此设置中使用 Express 3:
var express = require('express'),
http = require('http'),
io = require('socket.io'),
app = express();
server = http.Server(app);
ioServer = io(server);
ioServer.on('connection', callback);
server.listen(process.env.PORT || 3000, function () {
console.log('App listening on ' + server.address().port);
});
上面的代码运行良好,因为在创建 ioServer 时,不需要特定的端口。然而,在我切换到 Express 4 并开始使用 Heroku 的 WebSocket 服务后,我不得不像这样指定一个端口:
var WebSocketServer = require('ws').Server,
port = 5000,
server = http.createServer(app);
server.listen(port);
var wss = new WebSocketServer({server: server});
wss.on('connection', callback);
app.listen(app.get('port'), function() {
console.log('Express server listening.'));
});
这个新设置永远不会起作用,因为当我在 Heroku 上运行应用程序时,我收到一个错误,抱怨同一个端口不能被使用两次:
Error: listen EADDRINUSE :::40854
除了在 Express 4 中显式分配端口外,设置逻辑基本相同,那么为什么我的代码适用于 Express 3 而不是 Express 4?我应该如何解决这个问题?
【问题讨论】:
标签: node.js sockets express heroku websocket