ANTICHAT

ANTICHAT (https://forum.antichat.xyz/index.php)
-   PHP (https://forum.antichat.xyz/forumdisplay.php?f=37)
-   -   Web-chat on Lua (https://forum.antichat.xyz/showthread.php?t=1338969)

альбертио представляет 01.08.2019 22:29

Привет.

Видел, @NarutoUA сделал live-chat, однако, посмотрев, стало понятно - к серверу посылалось огромное количество запросов в минуту для получения новых сообщений.

Я же решил выложить свою версию чата.

Ссылка - https://muxui.randewoo.me/

В чем отличия?
  • Весь back-end написан на Lua.​
  • Алгоритм получения сообщений - LongPoll (сервер не даст ответ до тех пор, пока другой пользователь не напишет сообщение, что в сотни раз снижает нагрузку и трафик).​
  • Используется сверхскоростная-самописная база данных на P-Memcached (данные о пользователях не собираются, логи сервера полностью отключены).​
Исходный код в скором времени выложу в общий доступ (надо исправить баги, если найдутся, и привести код в порядок), сейчас же вы можете протестировать скорость работы чата (ответ от сервера (без создания клиент-серверной сессии) занимает не более 0.2 секунд).

Также, чат основан на самописном API. Если кому интересно, можно создавать ботов (есть умная система анти-флуда, если вы отправили более 3-х запросов на сервер, сервер выдаст вам ошибку, придется подождать 5 секунд с момента последней отправки сообщений).

PHP:





Код:

'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 01.08.2019 22:31

В темной тебе вообще нихуя не видно




Opera Снимок_2019-08-01_223102_blast.hk.pngVitali0 · 1 Авг 2019 в 21:31' data-fancybox="lb-post-378678" data-lb-caption-extra-html="" data-lb-sidebar-href="" data-single-image="1" data-src="https://www.blast.hk/attachments/36241/" style="cursor: pointer;" title="Opera Снимок_2019-08-01_223102_blast.hk.png">
https://forum.antichat.xyz/attachments/27378678/

альбертио представляет 01.08.2019 22:32

Цитата:

Сообщение от Vitali0

В темной тебе вообще нихуя не видно

О как. Хорошо, сейчас поправлю.

Stiopko 01.08.2019 22:39

Цитата:

Сообщение от muxui

О как. Хорошо, сейчас поправлю.

При первой загрузке сообщений загрузка идет наоборот

альбертио представляет 01.08.2019 22:41

Цитата:

Сообщение от Stiopko

При первой загрузке сообщений загрузка идет наоборот

Все новые сообщения появляются внизу, так привычней же.

xISRAPILx 01.08.2019 22:43

Вызов принят, пошел писать подобное на спринге!

UDP: Вот как отленюсь, так и сделаю.

Stiopko 01.08.2019 22:43

Цитата:

Сообщение от muxui

Все новые сообщения появляются внизу, так привычней же.

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

es3n1n) 01.08.2019 22:51

А при чем здесь JS CSS HTML ?

Carrentine 01.08.2019 22:56

Цитата:

Сообщение от es3n1n)

А при чем здесь JS CSS HTML ?

maybe комбо x3 епта.

winten 01.08.2019 23:31

было бы интересно посмотреть на сурсы. по описанию топ. только как зарегаться не понятно


Время: 12:58