-
Есть пример чата на tornado, но там пример для чата с одной комнатой. Есть механизмы которые позволяют передавать данные между потоками для создания чата тет-а-тет? или мож есть очереди именованные?
-
Там просто, переписываете ChatMixin класс собирать словарь списков ({roomid: [user1, ...], ...}) и отсылайте сообщение только нужным юзерам. Небольшой пример:
class PostMixin(object): waiters = {} cache = [] cache_size = 200 def online_updates(self, event_id): cls = PostMixin if not cls.waiters.get(event_id): cls.waiters[event_id] = [] users = memcache_counter(event_id, len(cls.waiters[event_id])) return users def wait_for_messages(self, callback, event_id, cursor=None): cls = PostMixin if cursor: index = 0 for i in xrange(len(cls.cache)): index = len(cls.cache) - i - 1 if str(cls.cache[index]["id"]) == str(cursor): break recent = cls.cache[index + 1:] if recent: callback(recent) return if not cls.waiters.get(event_id): cls.waiters[event_id] = [] cls.waiters[event_id].append(callback) memcache_counter(event_id, len(cls.waiters[event_id])) def new_messages(self, messages, event_id): cls = PostMixin if cls.waiters.get(event_id) and len(cls.waiters[event_id]) > 0: logging.info("Sending new message from event ID <%s> to %r listeners", event_id, len(cls.waiters[event_id])) for callback in cls.waiters[event_id]: try: callback(messages) except: logging.error("Error in waiter callback", exc_info=True) self.waiters[event_id] = [] cls.cache.extend(messages) if len(cls.cache) > self.cache_size: cls.cache = cls.cache[-self.cache_size:]
Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.

