@Fluber

Laravel чат в реальном времени, как лучше сделать?

Всем привет. У меня возник такой вопрос. Можно ли реализовать чат на laravel без всяких pusher (тем более, что он платный), socket.io и прочее? Чисто чат на php + javascript, возможно с технологией ajax. Мне нужен просто мессенджер, который будет в реальном времени отсылать/принимать/читать сообщения в реальном времени.

Вроде как это можно сделать, например на: https://kwork.ru у них как-то реализована система сообщений только на js и php. Просто отсылают ajax запрос без сокетов и всякой ерунды. И все сообщения приходят в реальном времени

В интернете я находил пакеты для laravel только с pusher, сокетами и все. Нормального ничего так и не нашел.
Может вы поможете?
  • Вопрос задан
  • 7066 просмотров
Пригласить эксперта
Ответы на вопрос 5
Sanasol
@Sanasol Куратор тега Laravel
нельзя просто так взять и загуглить ошибку
Нормального ничего так и не нашел.

все нормальное вы отнесли к ненормальному.

через аякс долбить каждую секунду хотя бы или лонгполлить, если отбросить нормальные варианты.
Ответ написан
solotony
@solotony
покоряю пик Балмера
реализовать то можно но ларавель тяжеловат для чата (т.е. если нужно делать постоянный опрос, на предмет новых событий/сообщений)

я бы для таких целей написал бы легенькую программу на С/С++, которая бы возвращала состояние и новое(ые) сообщение(я).
Ответ написан
@Levhav
Возьмусь за разработку проектов любой сложности.
Вместо пушера можете попробовать использовать мой проект комет сервера https://github.com/CppComet/comet-server он написан на С++ и предоставляет достаточно простое апи для отправки и приёма сообщений.

А если хочется иметь возможность использовать шаредхостинг и не ставить какое либо ПО к себе на сервер то можно использовать этот же комет сервер но как сервис https://comet-server.com/ у SaaS версии и open source версии одинаковое API, поэтому у вас не будет привязки к сервису и можно будет перейти с SaaS версии на опенсорс версию просто поменяв адрес сервера в настройках подключения и без каких либо правок в коде.

Если будут вопросы по комет серверу пишите мне. Контакты в профиле есть. Буду рад обсудить.
Ответ написан
Комментировать
Alex_Wells
@Alex_Wells
PHP/Kotlin
Вы выбрали ajax вместо сокетов?

Разберитесь в теме прежде чем называть pusher & socket.io "ерундой". Это ЛУЧШИЕ решения для чата (если не говорить о еще круче решениях, типа firebase & socketcluster). Вы хоть представляете, что такое отправка запроса каждую секунду для одного клиента? А если клиентов будет хотя бы 100? 100 жирных sql запросов каждую секунду? Зачем такая нагрузка?

socket.io выдержит тысячи клиентов при этом нагрузив всего одно ядро и чуток памяти.
pusher же вообще ничего не нагрузит.
Ответ написан
@rengen
Писал такой чат с запросами через jQuery
Логика такая: аякс запрос отправлять с помощью HEAD каждую секунду (можно чаще)
Запрос обрабатывает сервер nginx, сервер обращается к Memcached, если есть новые сообщения сервер возвращает код 200, если нет, код 600 который игнорируется.
Если jquery получает от сервера ответ 200, тогда формируется GET запрос на сообщение, которое уже обрабатывает PHP с обращением к базе данных.
При отправке любого сообщения, соответственно запись о новом сообщении помещается в memcached

онлайн 100 или 200 человек держит по нагрузке даже не заметно.
Чат до сих пор работает на ресурсе с посещаемостью 5-7 тыс человек в сутки.
Там ещё можно файлы, видео и фото загружать с фоновой пост-обработкой.

$.ajax({
				type: "HEAD",
				url: "/ex/chat.php?s="+reciever,
				success: function() {
					var lastid = Math.max.apply(null, $('.dialog_message').map(function() {
						return $(this).attr('id');
					}));
					$.ajax({
						type: "GET",
						url: "/index.php?action=messenger&todo=refresh_dialog&reciever=" + reciever + "&page=" + lastid,
						success: function(data) {
							$("#msgs").append(data);
							instanse = false;
							$("#msgsdiv").animate({ scrollTop: $('#msgsdiv').prop("scrollHeight")}, 500);
						}
					});
				}
			});


Другое дело, что Ларавел тут вобщем-то и не нужен :)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы