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

Javascript 带Express的Socket.io和Node.js>;4.0版本,javascript,node.js,sockets,socket.io,Javascript,Node.js,Sockets,Socket.io,我已经读了一些关于这个问题的其他帖子,但似乎没有正确理解 socket.io“get started”演练已经过时,它告诉我们在app.js文件中做些什么。从快车4号开始。一切都在www文件中处理 到目前为止,一切都很好——应该没什么大不了的 我使用以下命令在正确的项目文件夹中安装了socket.io:npm install--save socket.io 紧接着,我转到bin/www文件并添加了以下代码: ... /** * Create HTTP server. */ var serv

我已经读了一些关于这个问题的其他帖子,但似乎没有正确理解

socket.io“get started”演练已经过时,它告诉我们在app.js文件中做些什么。从快车4号开始。一切都在www文件中处理

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

我使用以下命令在正确的项目文件夹中安装了socket.io:
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


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

如果出于任何原因您需要访问路由器中的变量
io
,您可以使用
应用程序。set

bin/www:

var io = require('socket.io')(server);
app.set('io',io);
router.get('/', function(req,res,next) {
  console.log( req.app.get('io') );
});
路由/backend.js:

var io = require('socket.io')(server);
app.set('io',io);
router.get('/', function(req,res,next) {
  console.log( req.app.get('io') );
});

您可以将下面的代码从www文件放到某个单独的socketjs文件中

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

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

  }
}
通过这种方式,您可以在www文件中导入该socketjs文件,如下所示:-

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

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

    socket(io)
希望这对你有帮助