2013-07-12 2 views
3

Я хочу использовать Firebase для групповых чатов в чате.Использование Firebase для групповых чатов путем разговора

У меня есть следующая таблица:

Chat 
- id 
- from 
- to 
- message 
- date 

Я хочу использовать Firebase реализовать следующие SQL запросы:

  1. SELECT * FROM chat where id = 'XX' order by date

  2. SELECT * FROM chat GROUP BY id ORDER BY date

Как я могу это сделать с помощью Firebase?

Я имею в виду, что делать # 1, я могу сделать:

var chatMessagesRef = new Firebase(‘MY.firebaseio.com/chat_messages/chat_id’); 
chatMessagesRef.on(‘child_added’, function(snap) { 
    console.log(snap.val()); 
}); 

Но как я могу сделать # 2? а также как я могу сделать № 1 с датой заказа?

+0

Я не знаю, поможет ли это, но у меня есть репозиторий git, как я создал функцию обмена сообщениями. Он не будет работать с летучей мыши, но, возможно, это даст вам представление. https://github.com/cyrilivargarcia/Messaging –

ответ

2

Для чата, организованный в отдельные комнаты или чаты, рассмотреть вопрос о пересмотре своей структуры, чтобы быть следующими:

/chat_messages/<room-id>/<message-id>/<message-data> 

Используя эту структуру, можно создать новый номер/разговор идентификатор с использованием конкретного имени вашего выбирая или создавая Firebase, используя .push(). Всякий раз, когда вы хотите, чтобы написать новое сообщение в этой комнате, сделайте следующее:

var chatMessagesRef = new Firebase('<YOUR-FIREBASE>.firebaseio.com/chat_messages'); 
function sendMessage(roomId, message) { 
    chatMessagesRef.child(roomId).push(message); 
} 

Firebase по существу есть два пути для запроса данных:. По пути и по приоритету (см Firebase Blog: Denormalizing Your Data is Normal для получения дополнительной информации Firebase нажимные идентификаторы автоматически генерироваться сортировать в хронологическом порядке, так что вы можете получить в n самые последние сообщения для любого разговора, используя limit() запрос, например:

chatMessagesRef.child(roomId).limit(20).on('child_added', function(snapshot) { ... }); 

в качестве альтернативы, вы можете извлечь все сообщения для разговора, автоматически сортируются в хронологическом порядке, путем удаления limit() в приведенном выше описании.

Если вы еще этого не сделали, ознакомьтесь с Firechat, который является официальным чат-клиентом Firebase с открытым исходным кодом и включает полностью документированный клиент JavaScript, структуру данных и правила безопасности для чата.

+0

Как бы вы создали комнату, где отправитель и получатель могут получить к нему доступ? –

+0

@CyrilIvarGarcia Я бы сгенерировал новый уникальный идентификатор Pushbase («автоматическое» генерация идентификаторов), а затем сохранил список доступных идентификаторов комнат в другом месте, например «/ rooms». Иды в этом списке могут быть общедоступными/доступными как для отправителя, так и для получателя. –

Смежные вопросы