Набор инструментов, в котором вы наиболее опытны.
Вы можете реализовать это в любом наборе инструментов, если вы правильно разработали приложение; например:
- Вам не понадобится «многопоточная» окраска, так как пользователи, похоже, будут рисовать эффект параллельной окраски: вместо этого
- Используйте события. Отправляйте события, такие как «рисовать кривую» или «рисовать прямую линию», чтобы уведомить всех участников об обновлениях чертежа.
- Использовать синхронизацию кадров. Каждый участник хранит стек событий, упорядоченных по времени возникновения, который обновляется событиями, сгенерированными пользователем (например, «нарисовать это» и «нарисовать это»). Регулярно клиент отправляет свой стек событий другим участникам.
- Реализация собственной «сборки мусора»: если событие не изменяет какие-либо пиксели из-за того, что другие события перекрывают его, его можно отбросить (удалить из стека), чтобы повысить производительность при синхронизации кадров и рисования.
- Реализация свертывания событий. Например, 4 события, говорящие: «нарисовать линию от x до y», «нарисовать линию от y до z» и т. Д., Могут быть свернуты в форме траектории.
Клиенту нужно будет только прослушивать события и добавлять их в свой локальный кадр, рисовать общий кадр (каждый раз рисуя, перерисовывая все события на пустом холсте), отправлять события по сети другим клиентам и прослушивать для событий и ключевых кадров от других клиентов.
Чертеж однопоточный: он будет собирать все стеки (локальные и для каждого участника), упорядочивать их по времени появления и раскрашивать в таком порядке. Это поддерживается всеми упомянутыми каркасами.
Впрочем, #complex #dynamic #system.