Простенький ajax php+mysql чат вопрос нагрузки

150
03 марта 2022, 09:20

Есть онлайн браузерная игра, где на всех страницах есть мини чатик с малой активностью( менее 500 сообщенний в день ) так вот обновление чата происходит каждую секунду через ajax

На стороне сервера в пхп идет запрос к бд на наличие новых сообщений и это как вы понимаете сильно будет грузить базу(?) если игроков например 100+ в онлайне

я его переделал так чтобы при новом сообщении от пользователя последние 30 сообщений писались в json файле например chatMsg.json и ajax уже делает запрос не на пхп файл с запросом в базу, а загружает json файл

$.ajax({ 
	url: "base/chat/chatMsg.json",  
	cache: false, 
}).done(function(json) {

правильно ли это? вебсокеты использовать нету возможности

Answer 1

Ремарка:
текст ниже - не утверждение, а рассуждение.
сам с интересом "послушаю" про это.

есть такая штука:

  • Http Polling
  • Http Long Polling

и

  • Server-sent events

чуточку статей:

  • Polling vs SSE vs WebSocket— How to choose the right one
  • Создание приложений реального времени с помощью Server-Sent Events
  • Простая реализация long polling механизма на PHP
    там в комментах, упоминают:
    • dklab_realplexor
  • How To Do AJAX Long Polling With PHP MySQL

    In short, long polling is kind of a “necessary evil”… It is still bad, but it is much better than getting hammered.

Answer 2

Правильно, вполне годный вариант. Если нагрузка вырастет очень сильно и опять же не будет возможности использовать websocket, то отдавать такие json можно будет через весьма простое приложение на golang - тогда потребление памяти будет минимальным. Или правильно настроенный nginx вполне сможет отдавать по 90k в секунду таких файлов, при конфигурации linux сервера 4Gb RAM, 20GB HDD. Я подобное проверял на online radio player. А если данных не сильно много, то можно использовать redis ) тогда совсем все будет быстро с минимальными задержками и минимальными нагрузками на файловую систему, так как данные будут отдаваться сразу из оперативной памяти.

READ ALSO
После нахождения пользователя в mongo с помощью mongoose, хочу удалить поле , но оно остается

После нахождения пользователя в mongo с помощью mongoose, хочу удалить поле , но оно остается

delete возвращает true, но consolelog в строчке ниже и на frontend все равно имеет поле password

249
Как сократить костыль? Как написать короче данный скрипт?

Как сократить костыль? Как написать короче данный скрипт?

Всем привет! Написал тут решение данной задачи, но мне кажется что это какой-то костыльЕсли есть идеи, накидайте, пожалуйста

91
Неверные данные в localStorage

Неверные данные в localStorage

У меня есть файл с авторизацией пользователя, при логине я получаю токен в localStorageС этим все в порядке

88
Как сделать мультиязычный лендинг?

Как сделать мультиязычный лендинг?

Подскажите, как реализовать мультиязычный лендинг?

85