Приложение для чата в реальном времени с использованием Polymer и узла
У меня есть приложение узла, использующее Polymer в качестве внешнего интерфейса. Приложение работает за обратным прокси-сервером nginx, который работает с HTTP и т. Д. С использованием HTTP2. Я использую сеансы cookie с подписанными файлами cookie.
Теперь мне нужно добавить "чат в реальном времени" в приложение; Я думал, что в 2016 году это будет легко... мальчик, я был неправ.
Моим первым портом захода был Primus. Но есть вещи, которые я не совсем понимаю:
- Что произойдет, если сервер узла будет перезапущен? Все ли клиенту нужно будет переподключиться?
- Клиенты могут "зарегистрироваться" для определенных типов событий (которые затем должны получать через Primus/Websockets/ и т. Д.). Таким образом, каждая открытая "вкладка" должна иметь свой собственный идентификатор; если сервер будет перезагружен, а клиент переподключится, сможет ли сервер повторно использовать список "подписок"? (для этого клиент должен иметь одинаковый идентификатор)
Есть ли стандартное решение для всего этого, о котором я не знаю?
1 ответ
Я недавно работал над проектом чата, и я также использовал Polymer на стороне клиента.
На стороне сервера вы можете использовать Перья, как я. По сути, Feathers - это минималистичная оболочка для Express, которая использует Websockets и Socket.IO под капотом для связи в реальном времени. Это работает очень хорошо, вам не нужно беспокоиться о создании связей и все такое. У них также есть библиотека JS на стороне клиента, которую вы можете легко обернуть в компонент Polymer.
Что произойдет, если сервер узла будет перезапущен? Все ли клиенту нужно будет переподключиться?
Ответ - да, они будут автоматически подключаться.
Клиенты могут "зарегистрироваться" для определенных типов событий (которые затем должны получать через Primus/Websockets/ и т. Д.). Таким образом, каждая открытая "вкладка" будет иметь свой собственный идентификатор...
Это действительно зависит от вас, как вы разрабатываете свое приложение Feathers. Как я понимаю, вы хотите что-то вроде в Facebook, где у вас есть эти вкладки с разными людьми или несколькими людьми.
Для этого я использовал структуру данных Master-detail:
Диалог (1) --- (n) Сообщение
Пример:
разговор
{
"doc_created_at": "2016-09-21T07:30:02.289Z",
"doc_created_by": "299009a4-5423-4cdd-9e1a-59fca59404ae",
"doc_id": "00f61c96-4bc6-4c46-a22d-de246314695c",
"doc_patched_at": "2016-10-27T11:35:53.599Z",
"doc_type": "conversation",
"participants": [
{
"id": "635b05bc-ae23-4c5d-9ee5-87e7da2cac15",
"name": "User 1"
},
{
"id": "299009a4-5423-4cdd-9e1a-59fca59404ae",
"name": "User 2"
}
],
"sender": {
"id": "299009a4-5423-4cdd-9e1a-59fca59404ae",
"name": "User 2"
},
"last_message": "How are you?"
}
Сообщение № 1
{
"conversation_id": "00f61c96-4bc6-4c46-a22d-de246314695c",
"doc_created_at": "2016-09-23T06:10:28.727Z",
"doc_created_by": "299009a4-5423-4cdd-9e1a-59fca59404ae",
"doc_id": "00e5b904-c9fa-46f1-b108-9fc9a15d11fc",
"doc_type": "message",
"participants": [
{
"id": "635b05bc-ae23-4c5d-9ee5-87e7da2cac15",
"name": "User 1"
},
{
"id": "299009a4-5423-4cdd-9e1a-59fca59404ae",
"name": "User 2"
}
],
"sender": {
"id": "299009a4-5423-4cdd-9e1a-59fca59404ae",
"name": "User 2"
},
"message": "Hi"
}
Сообщение № 2
{
"conversation_id": "00f61c96-4bc6-4c46-a22d-de246314695c",
"doc_created_at": "2016-09-21T07:32:08.312Z",
"doc_created_by": "299009a4-5423-4cdd-9e1a-59fca59404ae",
"doc_id": "2a6c2f91-04a8-4447-a0a6-4b229d523afc",
"doc_type": "message",
"participants": [
{
"id": "635b05bc-ae23-4c5d-9ee5-87e7da2cac15",
"name": "User 1"
},
{
"id": "299009a4-5423-4cdd-9e1a-59fca59404ae",
"name": "User 2"
}
],
"sender": {
"id": "299009a4-5423-4cdd-9e1a-59fca59404ae",
"name": "User 2"
},
"message": "How are you?"
}
Я сохранил эту информацию в базе данных ( Couchbase).