Какой стек технологий лучше выбрать для разработки чата?

Ссылка скопирована
2 ответов

Хочу написать свою маленькую соц сеть и что-то похожее на анонимные чаты(например, такой или такой), в общем суть понятна. Итак, чего я не знаю и хочу, чтобы мне подсказали. Я знаю yii2 и что-то могу написать на нем, я написал простой интернет магазин и в принципе познакомился как связывать back и front, поэтому чтобы написать чат я за основу хочу взять фреймворк yii2, front Vue и т.к, на мой взгляд, там не будет очень много данных, я хочу взять бд mongo. Суть в том, что я не совсем понимаю работу вебсокетов, может быть кто-то писал что-то такое и может подсказать какую литературу или какие источники использовал.
Может быть сам чат никто с 0 не пишет и есть какие-то готовые решения? Насколько хорош мой выбор(yii2+vue+mongo)? Может быть стоит посмотреть на другие технологии и прежде чем начать писать что задумал , взять что-то попроще?

P.S Приложение хочу сделать с регистрацией, но не думаю, что это как-то сильно усложнит мою разработку

Дополнительно:

зачем все так усложнять

рабочий чат на websocket лежит в примерах наверное любой документации к websocket, первый же нагугленный проект (бакэнд на go но там код на 20 строк все понятно) на столько простой что даже непонятно что непонятно

а еще есть webrtc, эта технология дает еще один механизм коммуникации между пользователями вообще минуя сервер, добавь сюда шифрование и failover при неработающем webrtc и получишь готовый проект

Суть в том, что я не совсем понимаю работу вебсокетов, может быть кто-то писал что-то такое и может подсказать какую литературу или какие источники использовал.

Я думаю автору имеет смысл пройти какой-то учебный курс (желательно платный) по JS+WebSockets.
Это очень важная основа. Поэтому всякие yii2+vue+mongo не имеют никакого значение если ты не сможешь
разбираться в простейших сетевых ошибках и состояниях протокола.

Освоишь ws - делай любой чат. Ты его даже сделаешь без фреймворков.

  • Зачем платить? Вся инфа есть в открытом доступе
  • Daniel, это - мотивация. Когда платишь - то точно закончишь обучение до конца. По себе знаю.
  • mayton2019, на интерес не влияет, что толку. Все вылетит из головы
  • Daniel~, давайте не будем судить автора за короткую память. О себе я такое сказать могу. Да. Забываю иногда.
  • mayton2019, никто не судит. Я к тому, что если что-то неинтересно, то оно и вылетает. Просто купить курсы еще недостаточно. Нужен интерес.

Суть в том, что я не совсем понимаю работу вебсокетов

Клиент отправляет на сервер 1 HTTP запрос, после которого у него остаётся на длительное время открытое двухстороннее соединение, по которому он может общаться с сервером, будто у него сырой TCP-сокет (по факту так и есть).

Подробнее можно почитать на MDN.

Может быть сам чат никто с 0 не пишет и есть какие-то готовые решения?

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

Насколько хорош мой выбор(yii2+vue+mongo)?

Не уверен только на счёт mongo, тк в моих глазах это очень специфичное решение, которое не везде есть смысл применять.
Если у тебя зафиксирована структура данных, и при этом у тебя нет кучи разных данных, которые хочется хранить в денормализованном виде, то реляционная СУБД будет, вероятно, и эффективнее и проще.
Возможно, mongodb будет иметь смысл, если ты захочешь работать с сотнями тысяч клиентов, и тебе нужно будет распределять данные на несколько серверов (возможно, в разных ДЦ)

yii2 - вполне ок вариант, раз у тебя уже есть опыт работы с ним. Модули для работы с вебсокетами для него есть.

  • Самый шустрый чат, на подобии примеров от автора, получится на Redis при правильном подходе... ;)

Можно на сокетах, но это сложнее на бэке делать.
Проще всего простой REST-API. Но здесь придётся опрашивать сервер с некоторой периодичность, которая для тебя с твоей нагрузкой не критична

Не парьтесь. Чаты - это просто. И сам вебсокет - штука простая.

Если интересно, можете почитать вот эту статью: там рассказано, как самому, используя только http пакет в ноде принять ws-подключение и обработать/отправить сообщение
https://habr.com/ru/post/513224/

Также очень полезно почитать сам rfc о протоколе (в частности раздел 5.2, где показан сам фрейм)
https://www.rfc-editor.org/rfc/rfc6455

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Анна SEO Ответ

При выборе стека технологий для разработки чата, необходимо учитывать несколько ключевых факторов, таких как производительность, масштабируемость, безопасность и удобство использования. В зависимости от конкретных требований проекта можно выбрать оптимальный набор инструментов.

Одним из самых популярных вариантов для разработки чатов является использование WebSocket для обеспечения двусторонней связи между клиентом и сервером. WebSocket позволяет создать постоянное соединение между клиентом и сервером, что обеспечивает мгновенную доставку сообщений. Для реализации WebSocket на сервере можно использовать языки программирования, такие как Node.js, Python, Ruby или Java.

Для фронтенд-части чата можно выбрать JavaScript-фреймворк, такой как React, Angular или Vue.js. Эти фреймворки позволяют создавать динамические пользовательские интерфейсы, что делает использование чата более удобным и эффективным для пользователей.

Для хранения сообщений и других данных чата можно использовать базу данных, такую как PostgreSQL, MySQL или MongoDB. Выбор базы данных зависит от объема данных, требований к производительности и масштабируемости проекта.

Также стоит уделить внимание безопасности чата. Для защиты данных пользователей рекомендуется использовать шифрование данных при передаче через сеть и хранение в зашифрованном виде в базе данных.

В итоге, для разработки чата рекомендуется выбрать стек технологий, который соответствует требованиям проекта по производительности, масштабируемости, безопасности и удобству использования. Каждая технология имеет свои преимущества и недостатки, поэтому важно проанализировать конкретные потребности проекта перед принятием окончательного решения.

Другие ответы (1) Ответить на вопрос
Елена Вебер

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

1. WebSocket + Node.js + Express.js + Socket.io:
WebSocket - это протокол, который обеспечивает двустороннюю связь между клиентом и сервером в реальном времени. Node.js - платформа для разработки серверных приложений на JavaScript. Express.js - минималистичный и гибкий фреймворк для создания веб-приложений на Node.js. Socket.io - библиотека для работы с WebSocket в Node.js, которая упрощает обмен сообщениями между клиентом и сервером.

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

const express = require('express');
const http = require('http');
const socketIo = require('socket.io');
 
const app = express();
const server = http.createServer(app);
const io = socketIo(server);
 
io.on('connection', (socket) => {
  console.log('User connected');
 
  socket.on('message', (data) => {
    console.log('Message received: ', data);
    io.emit('message', data);
  });
 
  socket.on('disconnect', () => {
    console.log('User disconnected');
  });
});
 
server.listen(3000, () => {
  console.log('Server running on port 3000');
});

const express = require('express'); const http = require('http'); const socketIo = require('socket.io'); const app = express(); const server = http.createServer(app); const io = socketIo(server); io.on('connection', (socket) => { console.log('User connected'); socket.on('message', (data) => { console.log('Message received: ', data); io.emit('message', data); }); socket.on('disconnect', () => { console.log('User disconnected'); }); }); server.listen(3000, () => { console.log('Server running on port 3000'); });

2. Firebase Realtime Database + Firebase Cloud Messaging:
Firebase Realtime Database - облачная база данных, которая позволяет хранить и синхронизировать данные в реальном времени. Firebase Cloud Messaging - сервис для отправки уведомлений и сообщений на мобильные устройства.

Преимущества этого стека включают быструю разработку, готовность к использованию, высокую масштабируемость и простоту интеграции с мобильными приложениями.

3. WebSocket + React + Redux + Node.js:
React - JavaScript библиотека для создания пользовательских интерфейсов. Redux - библиотека для управления состоянием приложения. Node.js - платформа для разработки серверных приложений на JavaScript.

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

Конечный выбор стека технологий зависит от ваших потребностей и возможностей. Рекомендуется провести дополнительное исследование и прототипирование различных вариантов, прежде чем принимать окончательное решение.

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно