(Как) Могу ли я использовать ASP. NET Core для настраиваемой передачи пакетов TCP? - PullRequest
1 голос
/ 16 января 2020

У меня есть устаревший игровой сервер с типичным протоколом TCP-пакетов (длина / тип / данные [длина]), и моя задача - найти современные рамки для его перезаписи.

Написав (маленький) RESTi sh API в ASP. NET Core 2.1. Я знаю, что он обеспечивает функции DI / ведения журнала / конфигурации, которые могут идеально заменить аналогичные функции на старом сервере. Я думал, что смогу использовать ASP. NET Core, чтобы он обрабатывал указанные TCP-пакеты вместо HTTP-запросов.

Теперь я немного застрял в том, с чего начать, и если / как он вписался бы в ASP. NET Ядро. До сих пор я изучал RTFM о внутренней ASP. NET работе ядра и нашел некоторые вещи, которые меня смутили:

  • Официальные документы состояние Kestrel поддерживает только HTTP Scenar ios (не хочу использовать IIS). То же самое относится и к тегу 1011 * здесь, на SO.
  • Затем я обнаружил проект , в котором утверждается, что в Kestrel добавлена ​​поддержка TCP, но я не до конца понимаю, как это делается. Похоже, что это достигается путем реализации ConnectionHandler, но я не вижу, например, где он запускает TcpListener для приема новых непрерывных соединений с клиентами.
  • С Kestrel, казалось бы, не может быть и речи Я думал о написании IHostedService или BackgroundService для выполнения всех соединений TCP.
  • Тогда я не знал, смогу ли я использовать Middleware для передачи своих TCP-пакетов (подумал об авторизации и игре logi c middleware). Официальные документы быстро говорят о HTTP или "веб-" запросах, поэтому я подумал, что о типичном конвейере промежуточного программного обеспечения тоже не может быть и речи.

Подводя итог, мое исследование привело к следующие два вопроса:

  • Могу ли я на самом деле использовать Kestrel для непрерывных соединений TCP с двоичной связью?
  • Какова связь между конвейером промежуточного программного обеспечения и функциями HTTP / Kestrel? Могу ли я использовать промежуточный программный конвейер в пользовательских службах для связи по протоколу TCP?

1 Ответ

0 голосов
/ 16 января 2020

Новый ответ:

А как насчет WCF? Windows Фонд связи. У WCF есть опция только TCP. Это может быть подходящим «фреймворком».

Другой вариант, который вы хотели бы рассмотреть, это Серверная фреймворк Я играл с ним в первые дни, прежде чем он стал коммерческим.

Я хотел бы написать свои собственные с использованием TAP. Сколько клиентов вам нужно поддерживать? Какая пропускная способность для каждого клиента?

Предыдущий ответ:

Вот хороший пример TCP-сервера на Kestrel. Это тот, который вы нашли?

https://github.com/davidfowl/MultiProtocolAspNetCore/blob/master/KestrelTcpDemo/Program.cs

Вы используете System.IO.Pipelines для чтения данных из потока, который поступает в виде ReadOnlySequence

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...