Создавание совместного [закрытого] приложения рисования электронной доски

5
задан Steven Sproat 22 May 2010 в 18:56
поделиться

1 ответ

Создание любого инструмента / игры для совместной работы в реальном времени сводится к эффективной синхронизации изменений минимальной общей структуры данных между клиентами. Узким местом является пропускная способность сети. Отправляйте только информацию, абсолютно необходимую для синхронизации общих данных. Вы на правильном пути, сохраняя формы вместо отдельных пикселей. Однако фигуры не должны обрабатывать события мыши.Как вы заметили, широковещательная передача событий мыши быстро снижает пропускную способность сети! Вместо этого передайте дельты того, как формы изменяются событиями мыши. Например, вместо отправки mouse_motion () отправьте конечную позицию [x, y] после перемещения фигуры.

Я предлагаю разделить вашу программу рисования на серверную и клиентскую части. Сервер хранит официальную версию общих данных. Клиент никогда не манипулирует общей структурой данных напрямую; он отправляет на сервер только сетевые сообщения. Это может показаться глупым, если и клиент, и сервер находятся в одном процессе / ПК, но на то есть несколько веских причин:

  1. Общий путь кода для однопользовательского и многопользовательского режима
  2. Сетевые накладные расходы между клиентом и сервер в том же процессе близок к нулю при использовании локальных сокетов

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

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

  1. Отправить или прослушать сетевые широковещательные пакеты .
  2. Подключитесь напрямую через IP-адрес. (IP-адрес сервера должен быть передан с помощью других средств: чат, мобильный телефон, крики в комнате, почтовый голубь, ...)

Наконец, посмотрите, как устроены другие многопользовательские приложения. Вот несколько примеров:

  • Zoidcom Библиотека программирования многопользовательских игр (C ++).Большая часть этого ответа основана на информации из документации Zoidcom. Существуют даже примеры программ, демонстрирующих обнаружение сервера через сетевое вещание.
  • Алгоритм оперативного преобразования , лежащий в основе Wave, Google Docs. (статья обсуждение в Hacker News)
  • Etherpad Текстовый редактор для совместной работы в реальном времени с открытым исходным кодом.
  • Исходная многопользовательская сеть Объясняет, как устроен FPS, такой как HAlf-life. Разбирается в хитростях для уменьшения задержки / задержки.
  • Google Wave (По-видимому, документация все еще довольно скудная ...)
11
ответ дан 13 December 2019 в 19:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: