我正在尝试遵循有关如何在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?
答案 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