Express js和socket io端口3000已经

时间:2019-06-14 02:20:13

标签: javascript node.js express socket.io

我正在尝试遵循有关如何在express.js框架和node.js中使用socket.io的教程。

我遵循的每个教程都建议我使用以下几行在app.js中建立连接

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


io.on('connection', function(client) {
   console.log('Client connected...');

   client.on('join', function(data) {
     console.log(data);
  });
})

如果我使用的端口不是3000,则必须在http://localhost:3000/上运行我的应用程序,这可以工作。我收到端口3000已被使用的错误。

调试并查看代码后,我想我知道为什么会这样。在./bin/www.js文件(由express js自动创建)中,我们有以下几行:

/**
* Get port from environment and store in Express.
*/

var port = normalizePort(process.env.PORT || '3000');
app.set('port', port);
var server = http.createServer(app);
server.listen(port);

但是我不确定如何在我的app.js中使用相同的端口重用此创建的服务器。我对node.js完全陌生。如何在Express框架上正确设置套接字io?

2 个答案:

答案 0 :(得分:1)

您好,请在连接套接字后将您的server.listen像这样

var app=require('expess')();
var server = require('http').createServer(app);
var io = require('socket.io')(server);

io.on('connection', function(client) {
   console.log('Client connected...');

   client.on('join', function(data) {
     console.log(data);
  });
})
server.listen(3000);

我希望这行得通。谢谢

答案 1 :(得分:0)

为了杀死任何现有的节点进程,可以在外壳程序中运行killall node命令。

从代码中删除此行,这是对端口号进行硬编码-

server.listen(3000);

并添加类似这样的内容-

app.set('port', process.env.PORT || 3000);

app.listen(app.get('port'));

所以您的代码应类似于-

var server = require('http').createServer(app);
var io = require('socket.io')(server);
// server.listen(3000);
app.set('port', process.env.PORT || 3000);


io.on('connection', function(client) {
   console.log('Client connected...');

   client.on('join', function(data) {
     console.log(data);
  });
});

server.listen(app.get('port'));

现在,当再次运行您的应用程序时,它将默认在端口3000上启动,或者您可以在启动服务器时通过环境变量(PORT)来在其他端口上运行。

$ PORT=8080 node app.js