JS CSS HTML Информация Web-chat on Lua

muxui

Известный
Автор темы
192
100
Привет.
Видел, @NarutoUA сделал live-chat, однако, посмотрев, стало понятно - к серверу посылалось огромное количество запросов в минуту для получения новых сообщений.
Я же решил выложить свою версию чата.
Ссылка - https://muxui.randewoo.me/
В чем отличия?

  • Весь back-end написан на Lua.​
  • Алгоритм получения сообщений - LongPoll (сервер не даст ответ до тех пор, пока другой пользователь не напишет сообщение, что в сотни раз снижает нагрузку и трафик).​
  • Используется сверхскоростная-самописная база данных на P-Memcached (данные о пользователях не собираются, логи сервера полностью отключены).​
Исходный код в скором времени выложу в общий доступ (надо исправить баги, если найдутся, и привести код в порядок), сейчас же вы можете протестировать скорость работы чата (ответ от сервера (без создания клиент-серверной сессии) занимает не более 0.2 секунд).
Также, чат основан на самописном API. Если кому интересно, можно создавать ботов (есть умная система анти-флуда, если вы отправили более 3-х запросов на сервер, сервер выдаст вам ошибку, придется подождать 5 секунд с момента последней отправки сообщений).
PHP:
<?php
error_reporting(E_ALL & ~E_NOTICE);
ini_set('display_errors', false);
date_default_timezone_set('Europe/Moscow');
header('Charset: UTF-8');

$curl = curl([
    'method' => 'user.join',
    'login' => 'muxui',
    'password' => '*****',
]);
$access_token = $curl['response']['user_content']['access_token'];
$message_id = $curl['response']['message_content']['id'];
$long = false;

print('Бот запущен. Соединение с сервером закрылось.');
fastcgi_finish_request();

while (true) {
    if (!$long) {
        long();
    }
}

function long() {
    global $long;
    global $message_id;
    global $access_token;
    $long = true;
    $curl = curl([
        'method' => 'message.longpoll',
        'message_id' => $message_id,
        'access_token' => $access_token,
        'wait' => 10,
    ]);
    $message_id = $curl['response']['message_content']['id'];
    if (!$curl['response']['status']) die(json_encode($curl));
    foreach ($curl['response']['message_content']['messages'] as $json) {
        if (strpos($json['text'], 'cmd')) $text = '@' . $json['sender']['login'] . ', какие команды?';
        elseif (strpos($json['text'], 'help')) $text = '@' . $json['sender']['login'] . ', какие команды?';
        elseif (strpos($json['text'], 'time')) $text = '@' . $json['sender']['login'] . ', ' . date('H:i:s');
        $curl = curl([
            'method' => 'message.send',
            'text' => $text,
            'access_token' => $access_token,
        ]);
        $long = false;
    }
}

function curl($array) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, 'https://muxui-api.randewoo.me');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_2_0);
    curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($array));
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 120);
    $output = curl_exec($ch);
    curl_close($ch);
    return json_decode($output, true);
}
?>
P.S. Скорость также напрямую зависит от конфигурации сервера/веб сервера.
Конфигурация сервера:
1vCPU x 3600 GHz, 512 RAM, 1GiB/s SSD (чтение/запись) на 10 GB, сеть 200MiB/s.
Конфигурация веб-сервера:
Веб-сервер: nginx
Версия nginx: 1.14.1 (performance remake)
Лимит одновременных подключений: 10000
gZIP: Сжатие данных больше среднего (level 6, max level: 10).
Версия протокола HTTP: HTTP/2
Имеется Wildcard SSL от Let's Encrypt.
Время кэширования SSL сессии: 60 минут.
Включено всевозможное кэширование запросов-ответов на SSD.
Скрипт скомпилирован через LuaJIT.
Включено кэширование в RAM в самом nginx.
Включены пулы потоков.
Подключение к БД происходит только по UNIX сокету.

Надеюсь, более-менее понятно описал характеристики.
Напомню, как только приведу код в порядок - обязательно выложу его в общий доступ.
Также, извиняюсь за верстку. Я не верстальщик. ;)​
 
Последнее редактирование:

xISRAPILx

Перепишу свою жизнь на PHP
Проверенный
245
151
Вызов принят, пошел писать подобное на спринге!

UDP: Вот как отленюсь, так и сделаю.
 
  • Нравится
Реакции: muxui

Stiopko

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

winten.pw

Новичок
4
2
было бы интересно посмотреть на сурсы. по описанию топ. только как зарегаться не понятно
 
  • Нравится
Реакции: muxui

DonHomka

🆁🅸🅽🆆🅰️🆁🅴🆂
Модератор
2,884
1,957
Когда заходишь в чат сообщения в обратном порядке.
 
  • Нравится
Реакции: social enemy

muxui

Известный
Автор темы
192
100
да, я понял но первая загрузка идет наоборот, типа я написал сообщение оно отобразилось внизу, перезагружаю страницу, захожу на аккаунт и оно в самом верху почему-то
Понял, о чем Вы, спасибо, исправлю.
А при чем здесь JS CSS HTML ?
front-end разве у нас еще на чем-то пишется, помимо HTML/CSS/JS?
было бы интересно посмотреть на сурсы. по описанию топ. только как зарегаться не понятно
В скором времени.
Когда заходишь в чат сообщения в обратном порядке.
Понял, спасибо, исправлю.
Понял, о чем Вы, спасибо, исправлю.

front-end разве у нас еще на чем-то пишется, помимо HTML/CSS/JS?

В скором времени.

Понял, спасибо, исправлю.
Странно, у меня почему-то все нормально работает.
Можете прислать скриншот консоли в браузере?
36248

было бы интересно посмотреть на сурсы. по описанию топ. только как зарегаться не понятно
Все просто - регистрация не нужна.
Если Вы введете логин (который ранее не существовал) и пароль - Вы автоматически зарегистрируетесь.
Потом можете просто вставлять логин и пароль.
Но если же этот аккаунт существует, и Вы ввели неверный пароль - система уведомит Вас об этом.
 
Последнее редактирование:

Ded Perded

Участник
82
64
Считаю это **(там секретное слово для спецслужб). Шел 2019 век люди все еще юзали LP.

оставлю это тут
 
  • Нравится
Реакции: Roger571

muxui

Известный
Автор темы
192
100
Считаю это **(там секретное слово для спецслужб). Шел 2019 век люди все еще юзали LP.

оставлю это тут
Сразу поливать лишь из-за того, что схема не такая, какой ее привыкло видеть общество? Ну не глупо ли, хех?)
Знаю про сокеты, но стоит ли делать из мухи слона? Я захотел сделать бекенд на REST HTTP API - сделал.
Вы можете сделать тоже самое, но на сокетах, и мы даже можем устроить бенчмарки (да, для каждого запроса при разных ситуациях у меня есть готовый бенчмарк), и сравнить, что же все таки быстрее, REST HTTP API, или же WS.
P.S. Спойлер - REST HTTP API быстрее. Замерял.
Ну так, замерим?)
 

rraggerr

проверенный какой-то
1,704
867
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Сразу поливать лишь из-за того, что схема не такая, какой ее привыкло видеть общество? Ну не глупо ли, хех?)
Знаю про сокеты, но стоит ли делать из мухи слона? Я захотел сделать бекенд на REST HTTP API - сделал.
Вы можете сделать тоже самое, но на сокетах, и мы даже можем устроить бенчмарки (да, для каждого запроса при разных ситуациях у меня есть готовый бенчмарк), и сравнить, что же все таки быстрее, REST HTTP API, или же WS.
P.S. Спойлер - REST HTTP API быстрее. Замерял.
Ну так, замерим?)
общество привыкло смотреть на говно-чаты через гет запросы, пока все нормальные люди делают их через сокет
 
  • Нравится
Реакции: DonHomka