Какой стек технологий лучше выбрать для разработки чата?
Хочу написать свою маленькую соц сеть и что-то похожее на анонимные чаты(например, такой или такой), в общем суть понятна. Итак, чего я не знаю и хочу, чтобы мне подсказали. Я знаю 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. 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.
Преимущества этого стека включают высокую гибкость и масштабируемость фронтенда, удобное управление состоянием приложения, возможность создания переиспользуемых компонентов и простоту интеграции с бэкендом.
Конечный выбор стека технологий зависит от ваших потребностей и возможностей. Рекомендуется провести дополнительное исследование и прототипирование различных вариантов, прежде чем принимать окончательное решение.

При выборе стека технологий для разработки чата, необходимо учитывать несколько ключевых факторов, таких как производительность, масштабируемость, безопасность и удобство использования. В зависимости от конкретных требований проекта можно выбрать оптимальный набор инструментов.
Одним из самых популярных вариантов для разработки чатов является использование WebSocket для обеспечения двусторонней связи между клиентом и сервером. WebSocket позволяет создать постоянное соединение между клиентом и сервером, что обеспечивает мгновенную доставку сообщений. Для реализации WebSocket на сервере можно использовать языки программирования, такие как Node.js, Python, Ruby или Java.
Для фронтенд-части чата можно выбрать JavaScript-фреймворк, такой как React, Angular или Vue.js. Эти фреймворки позволяют создавать динамические пользовательские интерфейсы, что делает использование чата более удобным и эффективным для пользователей.
Для хранения сообщений и других данных чата можно использовать базу данных, такую как PostgreSQL, MySQL или MongoDB. Выбор базы данных зависит от объема данных, требований к производительности и масштабируемости проекта.
Также стоит уделить внимание безопасности чата. Для защиты данных пользователей рекомендуется использовать шифрование данных при передаче через сеть и хранение в зашифрованном виде в базе данных.
В итоге, для разработки чата рекомендуется выбрать стек технологий, который соответствует требованиям проекта по производительности, масштабируемости, безопасности и удобству использования. Каждая технология имеет свои преимущества и недостатки, поэтому важно проанализировать конкретные потребности проекта перед принятием окончательного решения.