Как настроить Rails + Node.js + Socket.io в том же приложении Dokku - PullRequest
0 голосов
/ 06 октября 2019

Я бы хотел настроить 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, но для этого уже должен был бы быть порт для каждого пользователя, и тогда у нас будет каждыйэкземпляр на другом порту, как настроить это для доступа из веб-контейнера?

Или как лучше всего решить эту проблему?

...