При массовом тестировании клиентских приложений сервер или клиент не получали информацию от другой стороны, хотя отправка была успешной. Это происходило из-за того, что при привязке (bind) использовался Ipv6, а один и тот же порт IPv4 был занят другим процессом. Чтобы решить эту проблему, в параметры запуска были добавлены две опции: -Djava.net.preferIPv4Stack=true и -Djava.net.preferIPv6Addresses=false, которые отключают использование IPv6.
Во время тестирования с большим объёмом данных было обнаружено значительное количество потерянных пакетов. Модель epoll использовала только один поток для приёма данных, и процессор был перегружен. Для оптимизации было решено использовать параметр SO_REUSEPORT, который позволяет использовать многоядерные процессоры. Подробнее об этом можно прочитать по ссылке: https://www.jianshu.com/p/61df929aa98b.
При большом количестве подключений было обнаружено, что задачи, выполняемые по расписанию с использованием Java API, занимали слишком много времени. Было принято решение оптимизировать их, используя механизм «тайм-слотов» (круговой алгоритм).
Друг поделился опытом использования KCP для поддержания соединения и реализации механизма сердцебиения в игре:
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )