HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > ПРОГРАММИРОВАНИЕ > PHP
   
 
 
Опции темы Поиск в этой теме Опции просмотра

  #1  
Старый 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 сокету.

Надеюсь, более-менее понятно описал характеристики.

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

Также, извиняюсь за верстку. Я не верстальщик.
 
Ответить с цитированием
 





Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.