Я бы хотел настроить Unreal Engine Pixel Streaming (WebRTC)
сервис, созданный в Node.js
+ Socket.io
вместе с моим приложением Ruby on Rails, в том же приложении, что и Dokku,
Основная проблемачтобы иметь возможность масштабировать это для более чем одного пользователя и использовать letsencrypt
+ NGINX
для SSL
.
Потоковая передача пикселей В основном передает одноранговую 3D-сцену за один раз, если вы хотите передаватьразные сцены для разных пользователей, нам нужен экземпляр сервера node.js для каждого пользователя.
Я выполнил несколько типов конфигурации, которые я мог бы найти, и все еще сталкиваюсь с ошибками CROSS-Origin или чем-то подобным.
В Rails у меня есть обычный сайт frontend + socket.io client и WebRTC
Бэкэнд службы WebRTC - это просто файл (cirrus.js) для общего сервера node.js, работающий напорт, который вы хотите.
Я могу заставить его работать, создав приложение для каждого пользователя с бэкэндом в отдельном приложении node.js, поэтому у меня нет проблем с политикой SSL или Same-origin, так какПриложение Rails и node.js работают по SSL и в том жеmain.
, но это нелегко масштабировать, я не нашел простого способа сделать это, и плагин letsencrypt для dokku перестал работать, поэтому я отказался от этого подхода.
Код Pixel Streaming прост, ничего лишнего, кроме node.js и стандартного WebRTC, вы можете найти его пример на github, например:
https://github.com/HOKGroup/Unreal_Pixel_Streaming/blob/master/cirrus.js
Документацию можно найти по адресу:
https://docs.unrealengine.com/en-US/Platforms/PixelStreaming/PixelStreamingOverview/index.html
Основной проблемой является масштабируемость, в документации вы можете увидеть, что ее можно использовать двумя способами:
Для вещания в видепрезентация (которая нас не интересует) или как независимые экземпляры (множественные полные стеки с сопоставлением), наша цель здесь
https://docs.unrealengine.com/en-US/Platforms/PixelStreaming/Hosting/index.html
Моя идея решить эту проблему будетсоздать экземпляр сервера службы webrtc в фоновом режиме в одном и том же приложении Rails, чтобы они могли масштабироваться вместе.
Это может изменить код сервера для каждого запроса, чтобы создать экземпляр, работающий на другом порту, нобыло быe для его динамической настройки в прокси и брандмауэре.
Я думал об использовании Sidekiq для запуска экземпляров node.js, но для этого уже должен был бы быть порт для каждого пользователя, и тогда у нас будет каждыйэкземпляр на другом порту, как настроить это для доступа из веб-контейнера?
Или как лучше всего решить эту проблему?