[英]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.