ANTICHAT

ANTICHAT (https://forum.antichat.io/index.php)
-   PHP (https://forum.antichat.io/forumdisplay.php?f=37)
-   -   Web-chat on Lua (https://forum.antichat.io/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

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

AnWu 01.08.2019 23:35

Когда заходишь в чат сообщения в обратном порядке.

альбертио представляет 02.08.2019 00:12

Цитата:

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

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

Понял, о чем Вы, спасибо, исправлю.

Цитата:

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

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

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

Цитата:

Сообщение от winten.pw

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

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

Цитата:

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

Когда заходишь в чат сообщения в обратном порядке.

Понял, спасибо, исправлю.

Цитата:

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

Понял, о чем Вы, спасибо, исправлю.

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

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

Понял, спасибо, исправлю.

Странно, у меня почему-то все нормально работает.

Можете прислать скриншот консоли в браузере?

https://forum.antichat.xyz/attachments/27378739/

Цитата:

Сообщение от winten.pw

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

Все просто - регистрация не нужна.

Если Вы введете логин (который ранее не существовал) и пароль - Вы автоматически зарегистрируетесь.

Потом можете просто вставлять логин и пароль.

Но если же этот аккаунт существует, и Вы ввели неверный пароль - система уведомит Вас об этом.

Ded Perded 02.08.2019 01:01

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

WebSocket

learn.javascript.ru


оставлю это тут

альбертио представляет 02.08.2019 02:25

Цитата:

Сообщение от Ded Perded

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

WebSocket

learn.javascript.ru


оставлю это тут

Сразу поливать лишь из-за того, что схема не такая, какой ее привыкло видеть общество? Ну не глупо ли, хех?)

Знаю про сокеты, но стоит ли делать из мухи слона? Я захотел сделать бекенд на REST HTTP API - сделал.

Вы можете сделать тоже самое, но на сокетах, и мы даже можем устроить бенчмарки (да, для каждого запроса при разных ситуациях у меня есть готовый бенчмарк), и сравнить, что же все таки быстрее, REST HTTP API, или же WS.

P.S. Спойлер - REST HTTP API быстрее. Замерял.

Ну так, замерим?)

rraggerr 02.08.2019 08:16

Цитата:

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

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

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

winten 02.08.2019 09:06

Стоит поправить чутка, иконки вылазят за край

Ded Perded 02.08.2019 10:54

Цитата:

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

P.S. Спойлер - REST HTTP API быстрее. Замерял.
Ну так, замерим?)

Мне кажется что это зависит на чем у тебя написан backend. NodeJS будет задыхаться от большого количества клиентов, да она асинхронная, но однопоточная.

Тот же python или lua будут чувствовать себя лучше. Будем идти выше, допустим go чем выше идём тем лучше будет и быстрее то либо иное. Может так же зависит от опыта разработчика, но так же не развиваться и сидеть на одном месте это плохо.

альбертио представляет 02.08.2019 12:27

Цитата:

Сообщение от Ded Perded

Мне кажется что это зависит на чем у тебя написан backend. NodeJS будет задыхаться от большого количества клиентов, да она асинхронная, но однопоточная.

Тот же python или lua будут чувствовать себя лучше. Будем идти выше, допустим go чем выше идём тем лучше будет и быстрее то либо иное. Может так же зависит от опыта разработчика, но так же не развиваться и сидеть на одном месте это плохо.

При таком потоке node выдержит нагрузку спокойно.

Я выбрал Lua. Да и сам прекрасно знаю, что быстрее и т.д.

Вы также можете прочитать начало темы - я создал всего лишь аналог чата от NarutoUA, на том же HTTP.

И, скажите, разве скорость работы большая?

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

Подниму, что-ли.

Quasper 19.08.2019 15:16

Как описал выходит годно, на сурс бы посмотреть) очень уж интересно

альбертио представляет 19.08.2019 15:27

Цитата:

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

Как описал выходит годно, на сурс бы посмотреть) очень уж интересно

Пока что, к сожалению, нет возможности выложить, занят крупным заказом. Возможно, недели через 2-3 выложу.

Quasper 19.08.2019 15:56

Цитата:

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

Пока что, к сожалению, нет возможности выложить, занят крупным заказом. Возможно, недели через 2-3 выложу.

Ждем-с с нетерпением)

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

Забыл оплатить домен.

Забыл оплатить сервер.

Потерял код.

Ставь лайк если делаешь так же.


Время: 00:11