繁体   English   中英

Express js和socket io端口3000已经

[英]Express js and socket io port 3000 is already

我正在尝试遵循有关如何在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框架上设置socket io?

你好,请把你的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);

我希望这会起作用。

为了终止任何现有的节点进程,可以在shell中运行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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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