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

альбертио представляет

Известный
Автор темы
348
184
Привет.
Видел, @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 сокету.

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

Vitali0

Известный
286
144
В темной тебе вообще нихуя не видно
Opera Снимок_2019-08-01_223102_blast.hk.png
 
  • Нравится
Реакции: cort

Stiopko

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

winten

Потрачен
409
184
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
было бы интересно посмотреть на сурсы. по описанию топ. только как зарегаться не понятно
 

AnWu

Известный
Всефорумный модератор
4,777
5,401
Когда заходишь в чат сообщения в обратном порядке.
 
  • Нравится
Реакции: atizoff

альбертио представляет

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

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

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

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

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

Ded Perded

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

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

альбертио представляет

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

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

rraggerr

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