Сеть

libGDX включает в себя некоторые классы для кросс-платформенной работы с сетью. Эти классы более известны как Gdx.net, смотрите документацию и исходный код.

Особенности

  • Кросс-платформенные HTTP запросы.
  • Поддержка мультиплатформенного TCP клиента и сервер сокета (исключая GWT) с настраиваемыми параметрами.
  • Оптимизированный TCP клиент и серверные настройки, направленные на низкую задержку.
  • Кросс-платформенный доступ к браузеру. Например, вы можете создать ссылку на ваш сайт в игре, и она откроет браузер на всех платформах.

Реализация

Описание классов:

  • Net – интерфейс, используемый для кросс-платформенной сети. Здесь вы можете получить объекты, необходимые для общения с сетью.
  • Socket – это интерфейс, который предоставляет вам адрес удаленного сокета, состояние соединения, потоки java.io.InputStream и java.io.OutputStream для работы с сокетом.
  • SocketHints – класс, используемый для настройки клиентских TCP сокетов.
  • ServerSocket – интерфейс, используемый для создания серверный TCP сокетов. Он предоставляет стандартный accept() метод для получения подсоединенного TCP клиента.
  • ServerSocketHints – класс используется для настройки серверных TCP сокетов.
  • HttpStatus – класс используется для простого способа узнать возвращенный код состояния.
  • HttpParameterUtils – класс используется для предоставления вспомогательных методов для HTTP запросов.

Чтобы создать клиентский TCP сокет, используйте метод newClientSocket():

Socket socket = Gdx.net.newClientSocket(Protocol protocol, String host, int port, SocketHints hints);

Чтобы создать серверный TCP сокет, используйте метод newServerSocket():

ServerSocket server = Gdx.net.newServerSocket(Protocol protocol, int port, ServerSocketHints hints);

Чтобы отправить HTTP запрос, используйте метод sendHttpRequest():

Gdx.net.sendHttpRequest(HttpRequest httpRequest, HttpResponseListener httpResponseListener);

Чтобы открыть системный браузер, используйте метод openURI():

Gdx.net.openURI(String URI)

Примечания

Существуют замечания при работе с сетью на различных платформах.

  1. Клиентские и серверные TCP сокеты не работают в GWT. Это связано с тем, что java.net не поддерживается в GWT и на данный момент не существует альтернатив, кроме WebSockets.
  2. Запуск браузера не поддерживается в Android Daydreams и живых обоях. Это связанно с ограничениями в реализации и/или платформы.
  3. На Android: для доступа к сети вы должны объявить следующие разрешение в AndroidManifest.xml файле: <uses-permission android:name="android.permission.INTERNET" />
  4. На Android: вы не можете получить доступ к сети в главном потоке без отключения строгого режима. Это делается для предотвращения сетевых операций в главном потоке. Смотрите подробнее о строгом режиме.
  5. На мобильных устройствах: будьте осторожны при реализации сети. Само беспроводной соединение, когда включено, потребляет много энергии. Так же будьте осторожны с ограничениями данных, которые могут возникнуть в сетях 1G/2G/3G/4G LTE. libGDX имеет оптимизированную конфигурацию для низкой задержки, но все же дает преимущества TCP.
  6. Поддерживаемые конфигурации сетей различаются между бекендом и Java реализацией.
  7. В основном потребление энергии батареи происходит при отправке и получении данных с помощью радиосигнала.

Также читайте статью о мобильных данных и эффективности батареи.