perf: 使用 NodeCache 替换 Map 保存 externalId

dev/supplier-email-drawer
LiaoYijun 9 months ago
parent 5a973ea114
commit 12a3ac3589

@ -22,9 +22,8 @@ const createWhatsApp = async phone => {
let qrCode = null; let qrCode = null;
const channelId = generateId(); const channelId = generateId();
const whatsAppNo = phone; const whatsAppNo = phone;
// 储存键值对 msgId-externalId // 缓存 msgId-externalId过期时间为 5 分钟
// TODO 使用 NodeCache 储存,设置有效期。⬇️ const externalIdCache = new NodeCache({ stdTTL: 60*5 });
const msgIdMap = new Map();
const logger = P({ timestamp: () => `,"time":"${new Date().toJSON()}"` }, P.destination('./wa-logs-' + phone + '_' + channelId + '.txt')); const logger = P({ timestamp: () => `,"time":"${new Date().toJSON()}"` }, P.destination('./wa-logs-' + phone + '_' + channelId + '.txt'));
logger.level = 'trace'; logger.level = 'trace';
const msgRetryCounterCache = new NodeCache(); const msgRetryCounterCache = new NodeCache();
@ -59,7 +58,7 @@ const createWhatsApp = async phone => {
if (msg.message?.conversation || msg.message?.extendedTextMessage?.text) { if (msg.message?.conversation || msg.message?.extendedTextMessage?.text) {
const text = msg.message?.conversation || msg.message?.extendedTextMessage?.text; const text = msg.message?.conversation || msg.message?.extendedTextMessage?.text;
const externalId = msgIdMap.get(msg.key.id); const externalId = externalIdCache.get(msg.key.id);
if (msg.key.fromMe) { if (msg.key.fromMe) {
waEmitter.emit('message:updated', { waEmitter.emit('message:updated', {
@ -118,7 +117,7 @@ const createWhatsApp = async phone => {
const text = msg.message?.conversation || msg.message?.extendedTextMessage?.text; const text = msg.message?.conversation || msg.message?.extendedTextMessage?.text;
const fromWhatsAppNo = parsePhoneNumber(msg.key.remoteJid); const fromWhatsAppNo = parsePhoneNumber(msg.key.remoteJid);
const externalId = msgIdMap.get(msg.key.id); const externalId = externalIdCache.get(msg.key.id);
if (msg.key.fromMe) { if (msg.key.fromMe) {
waEmitter.emit('message:updated', { waEmitter.emit('message:updated', {
id: msg.key.id, id: msg.key.id,
@ -159,7 +158,7 @@ const createWhatsApp = async phone => {
if (ignore) continue; if (ignore) continue;
const externalId = msgIdMap.get(msg.key.id); const externalId = externalIdCache.get(msg.key.id);
waEmitter.emit('message:updated', { waEmitter.emit('message:updated', {
id: msg.key.id, id: msg.key.id,
externalId, externalId,
@ -212,7 +211,7 @@ const createWhatsApp = async phone => {
const jid = formatPhoneNumber(number); const jid = formatPhoneNumber(number);
waSocket.sendMessage(jid, { text: content }) waSocket.sendMessage(jid, { text: content })
.then(msg => { .then(msg => {
msgIdMap.set(msg.key.id, externalId); externalIdCache.set(msg.key.id, externalId);
}) })
.catch(ex => { .catch(ex => {
console.error('sendTextMessage.error: ', ex) console.error('sendTextMessage.error: ', ex)
@ -229,7 +228,7 @@ const createWhatsApp = async phone => {
}); });
}); });
}; };
const sendImageMessage = async (number, imageUrl) => { const sendImageMessage = async (number, imageUrl) => {
const jid = formatPhoneNumber(number); const jid = formatPhoneNumber(number);
try { try {
@ -249,7 +248,7 @@ const createWhatsApp = async phone => {
console.error(`[${whatsAppNo}->${number}]发送图片消息出错: `, ex); console.error(`[${whatsAppNo}->${number}]发送图片消息出错: `, ex);
} }
}; };
const getProfilePicture = async (whatsAppNo) => { const getProfilePicture = async (whatsAppNo) => {
const number = formatPhoneNumber(whatsAppNo); const number = formatPhoneNumber(whatsAppNo);
try { try {
@ -286,7 +285,7 @@ const createWhatsApp = async phone => {
waSocket.sendMessage( waSocket.sendMessage(
number + '@s.whatsapp.net', { text: content } number + '@s.whatsapp.net', { text: content }
).then(msg => { ).then(msg => {
msgIdMap.set(msg.key.id, externalId); externalIdCache.set(msg.key.id, externalId)
}).catch(ex => { }).catch(ex => {
console.error('sendMessage.error: ', ex) console.error('sendMessage.error: ', ex)
waEmitter.emit('message:updated', { waEmitter.emit('message:updated', {
@ -302,14 +301,14 @@ const createWhatsApp = async phone => {
}); });
}); });
}); });
waEmitter.on('request.' + whatsAppNo + '.send.image', event => { waEmitter.on('request.' + whatsAppNo + '.send.image', event => {
const {to: number, externalId, imageUrl} = event; const {to: number, externalId, imageUrl} = event;
const jid = formatPhoneNumber(event.to); const jid = formatPhoneNumber(event.to);
waSocket.sendMessage( waSocket.sendMessage(
jid, {image: { url: imageUrl }} jid, {image: { url: imageUrl }}
).then(msg => { ).then(msg => {
msgIdMap.set(msg.key.id, externalId); externalIdCache.set(msg.key.id, externalId);
}).catch(ex => { }).catch(ex => {
console.error('sendMessage.error: ', ex) console.error('sendMessage.error: ', ex)
waEmitter.emit('message:updated', { waEmitter.emit('message:updated', {

Loading…
Cancel
Save