gpt4 book ai didi

node.js - Express-Generator - 包括 socket.io (bin/www)

转载 作者:太空宇宙 更新时间:2023-11-03 23:38:42 25 4
gpt4 key购买 nike

我一直是 Perl/PHP 的爱好者,但我喜欢改变,Node JS 似乎是我下一步的正确选择。

我在 YouTube 上观看了几个小时的教程,并阅读了这里的一些帖子 - 但我遇到了一些困难。

我想将 socket.io 包含在我的快速生成的应用程序 (v4.10.6) 中。但与此同时,我真的不想将 socket.on(...) 语句包含在一个文件中 - 我宁愿将其分开,就像使用路线一样。

鉴于快速生成的应用程序是在 bin/www 中启动的,我很困惑我需要在哪里 require('socket.io') 并指向所有“on”事件到。

This post on stackoverflow ,我想可能会回答我的问题 - 但它表明所有套接字处理程序都在 ./sockets/base.js 文件中 - 我对 Gofilord 对答案的响应感到困惑。

请原谅我的无知 - 目前这对我来说有点陌生,并且一如既往地感谢您花时间阅读本文并提供帮助。

/bin/www

#!/usr/bin/env node
var debug = require('debug')('rhubarb');
var app = require('../app');

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

var server = app.listen(app.get('port'), function() {
debug('Express server listening on port ' + server.address().port);
});

最佳答案

通常在 app.js 中需要 socket.io,然后告诉你的 io 服务器监听你的应用程序。使用您发布的示例,看起来像这样:

var debug   = require('debug')('rhubarb');
var app = require('../app');
var server = require('http').Server(app);
var io = require('socket.io')(server);

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

var server = server.listen(app.get('port'), function() {
debug('Express server listening on port ' + server.address().port);
});

socketio docs很好地解释了这一点。这是他们主页上的示例:

var app = require('express')();
var server = require('http').Server(app);
var io = require('socket.io')(server);

server.listen(80);

app.get('/', function (req, res) {
res.sendfile(__dirname + '/index.html');
});

io.on('connection', function (socket) {
socket.emit('news', { hello: 'world' });
socket.on('my other event', function (data) {
console.log(data);
});
});
<小时/>

更新:

我通常通过在 /lib 中创建一个名为 io.js 的库来模块化 socketio 设置,如下所示:

module.exports = function(server){
var io = require('socket.io')(server);

// catch errors
io.on('error', function(err){
throw err;
})

// Set Socket.io listeners by creating a socket.io middleware
// attachEventlisteners would live in `/controllers`
io.use(attachEventlisteners);

io.on('connection', function (socket) {

// do things

});

return io; // so it can be used in app.js ( if need be )
}

然后在 app.js 中,我可以在需要时简单地传递服务器:

  var io = require('./lib/io')(server);

您不需要在 app.js 中做任何进一步的事情,因为所有内容都在 /lib/io.js 中设置,但如果您愿意,您可以这样做,因为返回了 io 服务器。

关于node.js - Express-Generator - 包括 socket.io (bin/www),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27679308/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com