Javascript Express js和socket io端口3000已安装

Javascript Express js和socket io端口3000已安装,javascript,node.js,express,socket.io,Javascript,Node.js,Express,Socket.io,我正在尝试学习如何将socket.io与express.js framework和node.js一起使用 我遵循的每个教程都建议我使用以下几行在app.js中建立连接 var server = require('http').createServer(app); var io = require('socket.io')(server); server.listen(3000); io.on('connection', function(client) { console.log('C

我正在尝试学习如何将socket.io与express.js framework和node.js一起使用

我遵循的每个教程都建议我使用以下几行在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以外的端口运行我的应用程序,这是可行的。我得到的错误是端口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 framework上正确设置socket io?

您好,请将您的服务器放在那里。在socket连接后,请听下面的内容

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')(服务器);
//听(3000);
应用程序集('port',process.env.port | | 3000);
io.on('连接',功能(客户端){
log('Client connected…');
client.on('join',函数(数据){
控制台日志(数据);
});
});
监听(app.get('port'));
现在,当您再次运行应用程序时,默认情况下它将在端口3000上启动,或者您可以在启动服务器时传递一个环境变量(端口),像这样在其他端口上运行

$ PORT=8080 node app.js

我认为所有这些都是在www.js中由expressor自动生成的。您需要在app.js中进行更改,而不是我刚才添加的生成的文件签出示例代码。如果有效,请标记为正确答案。谢谢你的帮助。我得到服务器.set不是一个函数。@Muhannad我猜是
server.set
是一种类型,请尝试将其更改为
app.set
谢谢您的帮助。这并没有改变错误3000已经被使用,