2016-04-04 17 views
0

Düğüm için bir chatbot modülü olan RiveScript'i kullandığım bir Meteor uygulamasına sahibim. Modül, kullanıcı girişinin bazı yönlerini kaydedebilir. Sorun şu ki, modülü sunucuda çalıştırdığımda, durum bir kullanıcı için değil tüm kullanıcılar için kaydediliyor. Her kullanıcı için bir durum oluşturmaya nasıl başlarım?Bir Meteor uygulamasında sunucu durumu ve kullanıcılar, durum nasıl oluşturulur?

bir yöntem şöyle her kullanıcı için yeni bir bot oluşturmak olacaktır:

let RiveScript = require('rivescript'); 
let users = {}; 
Meteor.onConnection(connection => { 
    users[connection.id] = new RiveScript({utf8: true}); 
    users[connection.id].bot.loadDirectory('directory/', 
     () => { 
      users[connection.id].bot.sortReplies(); 
     } 
    ); 
    connection.onClose(() => { 
     delete users[connection.id] 
    }) 
}); 

Ancak bellek yönetimi açısından bu bir sorun neden olabilir. Bu konuda yaygın olarak kullanılan kalıplar var mı?

cevap

0

Meteor veya RiveScript ile aşina değilim, bu yüzden sorunuzu yanıtlıyorum umarım.

Her konuşma için belirli bir durumu korumak isterseniz, ör.

  • Sohbet # 1: bot belirli bir soruyu cevaplamak için kullanıcı bekliyor
  • Sohbet # 2: robot ... bir komuta
  • bekliyor

Neden don Şu anki durumuna bir konuşma tanımlayıcısı (ya da sizin durumunuzda connection.id) tahmin eden basit bir dizi mi kullanıyorsunuz?

Örnek: Daha sonra her konuşmanın durumunu izlemek ve ona göre hareket olabilir

// Just to simulate an enumeration 
var States = {WAITING: 0, WAITING_XXX_CONFIRMATION: 1, ...} 


var state = []; 

Meteor.onConnection(connection => { 
    state[connection.id] = States.WAITING; 

}); 

// Somewhere else, e.g. in response to a command 
    if (state[connection.id] == WAITING_XXX_CONFIRMATION && input === 'yes') { 
     // do something 

     // reset the state 
     set[connection.id] = WAITING; 
    } 

. Böyle StateManager.of(chatId).set(newState) olarak görüşme yapmak mümkün, mesela StateManager (Ayrıca daha yeniden kullanılabilir hale getirmek için bir nesne içindeki devlet yönetimini sarabilirdiniz ve güzel kullanımı.

Umut bu yardımcı olur.

+0

devlet tarafından ele alınır RiveScript nesnesini ve başka bir yöntemle bu nesnenin dışındaki durumu açıkça ele alamıyorum. Önerinizi tam olarak kavradığımı sanmıyorum? –

İlgili konular