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

OSCHINA-MIRROR/beykery-cocosocket

Клонировать/Скачать
README.md 8 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 26.11.2024 05:48 20cd88a

cocosocket

cocosocket — это базовый коммуникационный фреймворк, предназначенный для мобильных сетевых игр на основе cocos2d-x и Unity 3D. Он удовлетворяет потребности высокопроизводительной сетевой связи для мобильных игр, основанных на сокетах.

Проблемы

Одной из ключевых задач при разработке мобильной сетевой игры на основе cocos2d-x является создание стабильного и надёжного слоя сокетной коммуникации. Однако BSD socket представляет собой библиотеку функций на языке C, которая может быть сложной в использовании. Поэтому требуется создать стабильный и надёжный, но при этом достаточно простой в использовании слой коммуникации. Этот слой должен обеспечивать возможность установления соединения, чтения и записи основных типов данных (byte, short, int, long, utf8-строки), а также гибкого проектирования коммуникационных протоколов (например, разделение на фреймы и обработку пакетов). Кроме того, он должен работать в отдельном потоке от основного игрового потока и вызывать прослушиватели событий при возникновении сетевых событий (таких как установление соединения, закрытие соединения, ошибки или поступление пакетов). Возможно, потребуется синхронизация, например, если необходимо поместить полученные пакеты в очередь для обработки основным игровым потоком.

Решение

Cocosocket реализует упрощённый и элегантный API на C++, основанный на BSD socket. Помимо поддержки потоков, пулов потоков, очередей, сокетов и сокетных прослушивателей, Cocosocket предоставляет API для создания пользовательских коммуникационных протоколов. Также предлагается реализация протокола на основе lengthfield, который рекомендуется использовать. Cocosocket обеспечивает чтение и запись основных типов данных в соответствии с порядком сетевого потока (big endian).

Кроме того, Cocosocket включает поддержку механизмов блокировки, очередей и пулов потоков. Хотя эти функции не являются обязательными, они могут быть полезны для расширения функциональности.

Использование

Использование Cocosocket довольно просто. Рассмотрим следующий код:

    Socket* s = new Socket();//1
    SocketListerner* sl = new DefaultListerner();//2
    s->SetListerner(sl); //3
    s->SetProtocal(new LVProtocal());//4
    s->Connect("192.168.1.100", 3333);//5

Этот код выполняет следующие действия:

  1. Создаёт объект Socket. 2–3. Инициализирует и устанавливает сокетный прослушиватель (SocketListerner), который обрабатывает различные события, связанные с сокетом, такие как успешное соединение (OnOpen), закрытие соединения (OnClose), получение сообщения (OnMessage), тайм-аут соединения (OnIdle) и ошибки соединения (OnError). Эти методы вызываются в отдельном от основного игрового потоке, так как сокеты работают в своём собственном потоке. DefaultListerner используется только для тестирования, и при использовании Cocosocket необходимо настроить собственный прослушиватель.
  2. Устанавливает протокол (Protocal) для разделения на фреймы. Разделение на фреймы позволяет анализировать отдельные логические единицы информации из непрерывного потока данных. Например, сервер может отправлять два фрейма данных, AB и CD, которые могут быть получены клиентом в разных порядках. В этом случае логика приложения требует, чтобы AB и CD рассматривались как отдельные фреймы, а не как отдельные фрагменты данных.
  3. Соединяется с сервером, указывая IP-адрес и порт сервера. Если соединение успешно, вызывается метод OnOpen сокетного прослушивателя. При неудачном соединении вызывается OnClose.

О Cocosocket-server

Серверная часть представляет собой программу на Java, которая использует Netty в качестве основы. Netty — это высокопроизводительный коммуникационный фреймворк. Cocosocket-сервер скрывает сложность Netty, делая его более удобным для использования. Сравнение с Cocosocket-client может помочь понять обе стороны. Для использования Cocosocket можно начать с клиентской или серверной части, что облегчит понимание другой стороны.

О Cocosocket4unity

Эта программа предназначена для Unity 3D и имеет схожий API и функциональность с версией для C++. Она подходит для разработки сетевых игр в Unity 3D. В ней используется LitJSON, который был исправлен от проблемы с кодировкой UTF-8. Если требуется JSON-анализ, рекомендуется использовать LitJSON.

О KCP

В проекте Cocosocket4unity интегрирован KCP на C#, подходящий для разработки Moba-игр. Более подробную информацию о KCP можно найти в соответствующих источниках. KCP представляет собой алгоритм повторной передачи, независимый от базового протокола связи. Cocosocket4unity и jKCP предоставляют реализацию KCP, построенную поверх UDP и предоставляющую полный программный интерфейс. Это позволяет разработчикам легко создавать приложения для высокоскоростной передачи данных без необходимости разбираться в деталях UDP и KCP.

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

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

1
https://api.gitlife.ru/oschina-mirror/beykery-cocosocket.git
git@api.gitlife.ru:oschina-mirror/beykery-cocosocket.git
oschina-mirror
beykery-cocosocket
beykery-cocosocket
master