Шаблон асинхронного сервера iPhone GameKit

Каков наилучший способ реализации серверной части приложения с помощью iOS GameKit? Должен ли я создать отдельный поток сервера, который каким-то образом отвечает на все делегированные события (полученные данные и т. Д.)? Или, может быть, использовать NSRunLoops?

Не используйте потоки, если не знаете, что вам нужно.

Почти все использует цикл запуска основного потока по умолчанию. Вы не можете (легко) использовать другой цикл цикла без использования другого потока – каждый поток имеет не более одного цикла цикла.

(Строго говоря, в большинстве случаев используется «текущий» цикл запуска, который представляет собой цикл выполнения текущего исполняемого потока, который обычно будет основным потоком.)

В прошлом большинство компьютерных игр не запускали сетевой код в другом потоке, а это означает, что медленная графическая карта снижает производительность сетевого кода. В наши дни FPS часто запускают сетевой код в отдельном потоке по умолчанию или имеют возможность сделать это (Quake 3 имеет режим «чистого сервера»); это делает физику игры отделенной от производительности рендеринга хоста, что обычно хорошо.

(Так или иначе, выполнение чего-либо, что вызывает перезагрузку текстуры / etc в Quake 3, все еще отстает от потока сервера.)

Если вы собираетесь запускать сервер в отдельном потоке, я предлагаю общаться с локальным «клиентом» по «сети». Вам все равно придется писать какой-то сетевой код, поэтому просто используйте что-то вроде socketpair(AF_UNIX, SOCK_DGRAM, 0, &sockets) (если это не работает, попробуйте AF_INET) и рассматривайте их как UDP-сокеты.

Обратите внимание, что вам не нужно использовать GameKit для связи по Bluetooth. Если вы публикуете сервис Bonjour (см. NSNetService), он будет автоматически рекламироваться через ту же Bluetooth-PAN, которая используется для GameKit (под капотом GameKit работает над Bonjour через IP через Bluetooth). Если вы просто используете Bonjour и UDP, проще сделать его кросс-платформенным и поддерживать старые устройства, которые не выполняют GameKit по Bluetooth.

(Я думаю, что GameKit имеет дополнительные сетевые функции сетки, поэтому A и B могут обмениваться данными с помощью C и реле. Я не тестировал это. Это не очень важно.)

  • Файл CSSLayout не найден
  • Предложите собственное приложение с веб-службы
  • добавление методов добавления в делегат приложения для данных ядра
  • jQuery datepicker нужно долгое нажатие, чтобы открыть в iPhone
  • Базовая платформа Bluetooth и совместимые устройства
  • NSInvalidArgumentException ', причина: «Приложение попыталось представить контроллер модального вида nil
  • Совместное использование фотографий для отображения Instagram (масштаб и обрез)
  • Календарный вид вместо UIDatePicker
  • использовать камеру в качестве подсмотра
  • прокрутка части UIScrollView
  • Функция stringByReplacingOccurrencesOfString
  • Давайте будем гением компьютера.