[英]javascript node.js variable share among modules
我是新手,正在寻找解决方案,如何通过引用在文件(模块)之间共享变量。 例如,我在这里是app.js
const users = {},
waitingQueue = []
module.exports = function(io){
io.on('connection', (socket)=>{
users[socket.id] = socket
socket.on("Search", (d, ack)=>{
waitingQueue.push(socket)
// logic with waitingQueue
// logic with users {}
})
socket.on("otherEvent", (d, ack)=>{
// logic with waitingQueue
// logic with users {}
})
})
}
现在我想按模块划分它。 现在是新的app.js
const users = {},
waitingQueue = []
const Search = require('./search')
module.exports = function(io){
io.on('connection', (socket)=>{
users[socket.id] = socket
socket.on("Search", Search(users, waitingQueue))
})
}
现在在不同情况下我的麻烦
socket.on(“ Search”,...)
...应该是一个功能
现在,如果使用封闭器
socket.on(“ Search”,()=> ...)
可以将Search.js导出为已修改的{users,waitingQueue}形式,但是需要覆盖用户和waitingQueue变量,但是不起作用。 我也需要紧密耦合地将这些变量共享给其他模块。
我也尝试基于事件发射器的方法Object.observe(),但无法解决问题。 任何人都可以帮助我解决此问题
好吧,我的假设是在现实世界中的应用程序users
, waitingQueue
将来自某种持久性存储,例如数据库,因此跨模块“共享”数据的概念将不是问题,因为您很可能直接从数据库中获取数据。 D B。
但是,如果我确实有要在不同模块之间共享的内存中“全局”数据,那么我很可能会将其移至其自己的模块中,例如
data.js
module.exports = {
users: {},
waitingQueue: []
}
app.js
const Search = require('../search');
const data = require('./data');
module.exports = io => {
io.on('connection', (socket) => {
data.users[socket.id] = socket;
socket.on('Search', Search(data.users, data.waitingQueue));
});
}
作为自己的模块, data.js
可以在其他各种模块之间共享。
我将使用REDIS来存储共享值。
您可以使用redis客户端获取/设置值,这些值将存储在redis数据库中,然后可以从同一本地计算机(如db)或一组本地文件中的任何进程中的任何代码获取/设置这些值。远程机器(这就是为什么我稍后会提到扩展的原因...)
Redis可以进行基准测试 ,根据我的经验,与其他数据库解决方案相比,它的运行速度惊人。
使用起来非常简单: Redis数据类型和抽象简介
- 二进制安全字符串。
- 列表:根据插入顺序排序的字符串元素的集合。
- 集:唯一,未排序的字符串元素的集合。
- (排序的集合,类似于集合)
- 哈希,是由与值关联的字段组成的映射。 字段和值都是字符串。 这非常类似于
Ruby或Python哈希。...还有更多...
我建议您安装数据库服务器和客户端,并尝试获取和设置一些值,我相信它将对将来有用。
它会为您的武器库提供更多力量
通过使用socket.io-redis适配器运行socket.io,您可以在不同的进程或服务器中运行多个socket.io实例,这些实例或进程可以相互广播并相互发射事件。
如果您需要从非socket.io进程向socket.io实例发出事件
编辑我知道您想在代码之间共享变量,但是由于我看到您正在使用socket.io,因此您可能还希望在从属设备之间共享这些变量...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.