繁体   English   中英

Express> 4.0版本的Socket.io和Node.js

[英]Socket.io and Node.js with Express >4.0 Version

我已经阅读了有关该问题的其他几篇文章,但似乎并没有解决问题。

socket.io“入门”演练已过时,并告诉您执行app.js文件中的操作。 从Express 4开始,所有内容都在www文件中处理。

到目前为止,一切都很好-应该没什么大不了的。

我使用以下命令在正确的项目文件夹中npm install --save socket.io

之后,我转到bin / www文件并添加以下代码:

...
/**
 * Create HTTP server.
 */

var server = http.createServer(app);

/**
* Socket IO
*/
var io = require('socket.io')(server);

/**
 * Listen on provided port, on all network interfaces.
 */

server.listen(port);
server.on('error', onError);
server.on('listening', onListening);
...

现在我已经在www文件中需要了socket.io,我将以下代码添加到app.js中。 由于app.js不再处理我认为也必须放入www文件的内容:

io.on('connection', function(socket){
  console.log('a user connected');
});

可悲的是,我不知道如何访问www文件夹之外的变量io。

我创建了一个/ backend路由,该路由应该动态显示所有在线用户。 如何在该路径上访问io?

您可以将下面的代码从www文件放入一些单独的socketjs文件中。

在您的socketjs文件中的代码将如下所示:-

module.exports = function (io) {
  io.sockets.on('connection', function(socket) {
    //..

  }
}

这样,您可以将该socketjs文件导入www文件中,如下所示:-

    var app = express(),
    server = require('http').createServer(app),
    socket = require('./socket');

    var io = require('socket.io').listen(server);

    socket(io)

希望这对您有所帮助。

如果出于任何原因需要在路由器中访问变量io ,则可以使用app.set

斌/ WWW:

var io = require('socket.io')(server);
app.set('io',io);

路线/ backend.js:

router.get('/', function(req,res,next) {
  console.log( req.app.get('io') );
});

暂无
暂无

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

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