1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/344453111-java-Kcp

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
QA.md 3.5 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 02.12.2024 11:39 cf43010

Проблемы и опыт, с которыми мы столкнулись в процессе тестирования

  1. При массовом тестировании клиентских приложений сервер или клиент не получали информацию от другой стороны, хотя отправка была успешной. Это происходило из-за того, что при привязке (bind) использовался Ipv6, а один и тот же порт IPv4 был занят другим процессом. Чтобы решить эту проблему, в параметры запуска были добавлены две опции: -Djava.net.preferIPv4Stack=true и -Djava.net.preferIPv6Addresses=false, которые отключают использование IPv6.

  2. Во время тестирования с большим объёмом данных было обнаружено значительное количество потерянных пакетов. Модель epoll использовала только один поток для приёма данных, и процессор был перегружен. Для оптимизации было решено использовать параметр SO_REUSEPORT, который позволяет использовать многоядерные процессоры. Подробнее об этом можно прочитать по ссылке: https://www.jianshu.com/p/61df929aa98b.

  3. При большом количестве подключений было обнаружено, что задачи, выполняемые по расписанию с использованием Java API, занимали слишком много времени. Было принято решение оптимизировать их, используя механизм «тайм-слотов» (круговой алгоритм).

  4. Друг поделился опытом использования KCP для поддержания соединения и реализации механизма сердцебиения в игре:

  • Conv используется как уникальный идентификатор соединения.
  • На сервере установлено время ожидания сердцебиения 10 минут.
  • Клиент устанавливает время ожидания ответа от сервера 10 секунд.
  • Если клиент не отправляет данные, он отправляет пакет сердцебиения каждую секунду. Как только сервер получает такой пакет, он немедленно отвечает. Если ответ от сервера не получен в течение 10 секунд, соединение считается разорванным.
  • После истечения времени ожидания клиент отображает сообщение о том, что сеть отключена и требуется повторное подключение. При повторном подключении локальный UDP повторно привязывает порт и использует новый порт для отправки данных. Объект KCP остаётся неизменным.
  • При повторном подключении после закрытия игры используется новое значение conv.

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/344453111-java-Kcp.git
git@api.gitlife.ru:oschina-mirror/344453111-java-Kcp.git
oschina-mirror
344453111-java-Kcp
344453111-java-Kcp
master