亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

全局數據對象

全局數據對象

30秒到達戰場 2022-08-04 17:19:58
從第二個文件加載數據對象時,該對象為空。有沒有辦法獲取所有文件上的對象子級?索引.js:const {ShardingManager} = require('discord.js');require('dotenv').config();const chalk = require('chalk');const storage = require('./Modules/GlobalStorage');storage.setDataObject('test', 'test_value');console.log(chalk.yellow(`Shard Manager Data: ${JSON.stringify(storage.listDataObjects())}`));let shardManager = new ShardingManager('./Shard/index.js', {    totalShards: 2,    token: process.env.CLIENT_TOKEN});shardManager.spawn();shardManager.on('shardCreate', (shard) => {    console.log(chalk.rgb(75,0,130)(`[SHARD] Created Shard (ID: ${shard.id})`));});模塊/全局存儲.js:let DataObject = {};exports.listDataObjects = () => {   return DataObject;};exports.setDataObject = (key, property) => {   DataObject[key] = property;   if(DataObject[key]) return true;};exports.getDataObject = (key) => {   return DataObject[key];};分片/索引.js:const {listDataObjects, getDataObject} = require("../Modules/GlobalStorage");console.log(chalk.yellow(`Shard Data: ${JSON.stringify(listDataObjects())}`));我標記discord.js的原因是這是我的discord bot,它是分片的,這是(我相信)問題。
查看完整描述

1 回答

?
心有法竹

TA貢獻1866條經驗 獲得超5個贊

生成的分片是不與主進程共享內存的新進程。它們無法訪問相同的全局變量或任何其他變量 - 它們之間的唯一通信必須通過某些第三方(如磁盤上的文件或緩存服務器)或通過IPC(等)。process.send

哪種方法最適合您取決于您實際需要此全局存儲的原因。我個人會推薦像redismemcached這樣的東西,但你也可以考慮自己編寫一個IPC驅動程序來獲取你正在尋找的任何信息。分別查找主進程和工作線程的 subprocess.send 和 process.send。

我不建議的絕對最后手段是讓你的主進程在修改文件時將文件寫入磁盤,并在每次需要獲取一些信息時讓工作進程從磁盤讀取。如果此全局對象將被高度使用(不和諧機器人 - 這是全局成員緩存還是其他什么?),這是非常不可取的,因為您的I / O負載將很高并且容易損壞。請改用上面建議的解決方案之一。


查看完整回答
反對 回復 2022-08-04
  • 1 回答
  • 0 關注
  • 144 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號