Использование ржавой паутины с железом
Можно ли использовать rust-websocket с железом, или нет смысла использовать оба вместе?
Если это возможно, как я могу это реализовать?
2 ответа
Поскольку ваша цель - создать высокопроизводительный веб-сервер, то начинать с HTTP-сервера, такого как Iron, вероятно, не имеет смысла. (Iron основан на Hyper, который позиционирует себя как "быстрая и правильная реализация HTTP"). Я бы порекомендовал посмотреть на tokio, который был разработан как "асинхронная, управляемая событиями платформа" и используется Hyper и Iron.
Для WebSockets требуется другой протокол, который создает двусторонний интерактивный сеанс связи. Из документов Mozilla:
вы можете отправлять сообщения на сервер и получать ответы, управляемые событиями, без необходимости опрашивать сервер для получения ответа.
Итак, если вам не нужен HTTP, то запуск с сервера, ориентированного на запрос / ответ, скорее всего, принесет больше сложности, чем пользы. Хотя проблема железных веб-сокетов все еще открыта, в недавнем комментарии отмечается:
Лично я считаю, что довольно сложно вписать websocket в модель запроса-промежуточного программного обеспечения-ответа Iron. Я не встречал для этого элегантной абстракции на других языках.
Если вы действительно хотите изучить использование WebSockets с Iron, вам нужно будет расширить hyper для поддержки WebSockets (хорошее обсуждение здесь), а затем получить доступ к низкоуровневому гипер-соединению (объяснено в проблеме с железом № 478). После установления соединения будет полезна библиотека WebSocket (хотя rust-websocket, похоже, больше не поддерживается).
Я рассматриваю возможность использования как Iron, так и rust-websocket в одном проекте, а архитектура, к которой я пришел, включает прослушивание websocket через отдельный порт. Я могу замаскировать это при развертывании с Nginx в передний прокси обратно на определенные порты
Звучит так, будто вы хотите заменить Hyper внутри Iron на ржавую паутину. Скорее всего, это будет трудно, если вообще возможно. Iron тесно интегрирован с Hyper, и весь проект основан на работе по HTTP(S). Если это действительно то, что вы хотите сделать, возможно, стоит обратиться к разработчикам Iron, чтобы узнать о возможности переключения интерфейса связи, но я не знаю, насколько вероятно, что они будут восприимчивы к этому. идея.