我是nodejs和socket的新手。我想知道的是我应该如何在不同的控制器或文件中访问我的io
变量。将io
变量声明为:
global.io = require('socket.io').listen(server);
所以现在我的io
可以在我的任何控制器中访问吗?
我从这个链接得到了这个想法:
https://blog.sylo.space/use-global-variable-for-socket-io/
答案 0 :(得分:0)
如果它与另一个变量重叠,它可能会导致崩溃,如果你的项目非常大和/或包含大量的librariers,它可能很难跟踪/处理,它也存在于应用程序的生命周期中,从而占用资源。并且使用全局变量总体上被认为是不好的做法。
您可以在此处查看有关node.js中全局变量的精彩文章 - http://stackabuse.com/using-global-variables-in-node-js/
编辑:既然你提到了安全性,理论上是安全的,不推荐。答案 1 :(得分:0)
在大多数情况下,全局变量表明软件设计不佳。更好的方法是在不同的类/模块中包含所有IO代码。这是一段简短的代码片来说明我的意思:
const socketIO = require('socket.io');
class myIO {
construct(server) {
this.io = socketIO.listen(server)
}
doStuff() {
// do stuff with your io socket
}
}
module.exports = myIO;
现在你需要为你的控制器提供一个myIO实例,但我不确定在你的情况下是什么构成一个控制器。你是否需要每次都重新连接套接字,或者重用相同的套接字?
无论哪种方式,您可能想要查看依赖注入模式或使用单例:
module.exports = new myIO();
在这种情况下,require(“myio”)将始终返回相同的套接字。或者,如果您的框架有一个注册表,您可以使用它。