Memcach中的GAE聊天数据持久化

2024-09-27 17:54:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在写一个聊天功能(比如Faceboook.com网站一)谷歌应用引擎网站。我需要一种方法来跟踪用户有什么新消息。我正在尝试使用Memcache:

class Message():
    def __init__(self, from_user_key, message_text)
        self.from_user_key = from_user_key
        self.message_text = message_text

class NewMessages():
    def __init__(self):
        self.messages = []
    def add_message(self, message):
        self.messages.append(message)
    def get_messages(self):
        return self.messages
    def messages_sent(self):
        self.messages = [] #Clear all messages

def ChatUserManager():
    def load(user_key):
        manager = memcache.get("chat_user_%s" % user_key)
        if manager is not None:
            return manager
        else:
            manager = ChatUserManager(user_key)
            memcache.set("chat_user_%s" % user_key, manager)
            return manager
    def save(self):
        memcache.set("chat_user_%s" % user_key, self)
    def __init__(self, user_key):
        self.online = True
        self.new_messages = NewMessages()
        self.new_data = False
        self.user_key = user_key
    def recieve_message(self, message):
        self.new_data = True
        self.new_messages.add_message(Message(from_user_key, message_text))
    def send_message(self,  message):
        to_manager = ChatUserManager.load(message.from_user_key)
        to_manager.recieve_message(message)
    def client_receive_success(self):
        self.new_data = False
        self.new_messages.messages_sent()

这种聊天是用户对用户的,就像Facebook或IM会话,而不是群聊。在

每个用户将使用ajax轮询一个url,以每x秒获得一条新的消息。聊天管理器将加载到该页面(ChatUserManager.load(用户密钥)和新消息将被检查。当它们被发送时,经理将被告知消息已被发送(manager.client接收成功()),然后保存回memcache(经理.save()). 在

当用户在javascript客户机中发送消息时,它将向url发送ajax请求。url将加载客户端的UserChatManager并调用。send_message(message(to_user_key,message_string)))。在

我很关心这个模型的实用性。如果所有内容都在memcache中,如何在不同的页面上同步?在

有更好的方法吗?在

我承认我还不是一个python专业人士,所以代码可能不是很python,有没有我遗漏的最佳实践?在


Tags: keytext用户fromself消息messagenew
1条回答
网友
1楼 · 发布于 2024-09-27 17:54:51

问题不在于如何在“页面”之间共享数据,而在于使用memcache将如何影响服务的可用性。在

对于memcache中的数据持久性,没有任何保证:一个时刻它就在那里,另一个时刻可能不存在。在

相关问题 更多 >

    热门问题