 |
|

01.08.2019, 22:29
|
|
Постоянный
Регистрация: 25.07.2019
Сообщений: 348
С нами:
3581468
Репутация:
48
|
|
Привет.
Видел, @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 сокету.
Надеюсь, более-менее понятно описал характеристики.
Напомню, как только приведу код в порядок - обязательно выложу его в общий доступ.
Также, извиняюсь за верстку. Я не верстальщик. 
|
|
|

01.08.2019, 22:31
|
|
Участник форума
Регистрация: 27.02.2018
Сообщений: 286
С нами:
4319894
Репутация:
98
|
|
В темной тебе вообще нихуя не видно
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">

|
|
|

01.08.2019, 22:32
|
|
Постоянный
Регистрация: 25.07.2019
Сообщений: 348
С нами:
3581468
Репутация:
48
|
|
Сообщение от Vitali0
В темной тебе вообще нихуя не видно
О как. Хорошо, сейчас поправлю.
|
|
|

01.08.2019, 22:39
|
|
Постоянный
Регистрация: 28.02.2018
Сообщений: 307
С нами:
4319022
Репутация:
113
|
|
Сообщение от muxui
О как. Хорошо, сейчас поправлю.
При первой загрузке сообщений загрузка идет наоборот
|
|
|

01.08.2019, 22:41
|
|
Постоянный
Регистрация: 25.07.2019
Сообщений: 348
С нами:
3581468
Репутация:
48
|
|
Сообщение от Stiopko
При первой загрузке сообщений загрузка идет наоборот
Все новые сообщения появляются внизу, так привычней же.
|
|
|

01.08.2019, 22:43
|
|
Участник форума
Регистрация: 28.02.2018
Сообщений: 247
С нами:
4319646
Репутация:
63
|
|
Вызов принят, пошел писать подобное на спринге!
UDP: Вот как отленюсь, так и сделаю.
|
|
|

01.08.2019, 22:43
|
|
Постоянный
Регистрация: 28.02.2018
Сообщений: 307
С нами:
4319022
Репутация:
113
|
|
Сообщение от muxui
Все новые сообщения появляются внизу, так привычней же.
да, я понял но первая загрузка идет наоборот, типа я написал сообщение оно отобразилось внизу, перезагружаю страницу, захожу на аккаунт и оно в самом верху почему-то
|
|
|

01.08.2019, 22:51
|
|
Новичок
Регистрация: 26.07.2019
Сообщений: 18
С нами:
3580925
Репутация:
13
|
|
А при чем здесь JS CSS HTML ?
|
|
|

01.08.2019, 22:56
|
|
Постоянный
Регистрация: 25.12.2018
Сообщений: 568
С нами:
3886298
Репутация:
113
|
|
Сообщение от es3n1n)
А при чем здесь JS CSS HTML ?
maybe комбо x3 епта.
|
|
|

01.08.2019, 23:31
|
|
Постоянный
Регистрация: 30.03.2017
Сообщений: 408
С нами:
4800741
Репутация:
98
|
|
было бы интересно посмотреть на сурсы. по описанию топ. только как зарегаться не понятно
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|