Правильно ли выделять целый порт под определенную задачу на сервере?
Надеюсь я корректно расписал свой вопрос
Вечерочка, Хабр! При написании сервера задался таким вопросом: если мне необходимо реализовать авторизацию пользователя, отправку данных при запросе(в моем случае новостных блоков), а так же прием и отправку сообщений по чатам, то под каждую задачу мне необходимо выделить отдельный порт, чтобы принимать, обрабатывать и отвечать на определенные запросы? Если же нет и обойтись можно лишь одним портом, тогда вопрос следующий: как мне фильтровать полученные данные и по каким критериям, чтобы, например, при авторизации люди получали подтверждение входа, а не новостной блок. Заранее спасибо!
P.S работаю я преимущественно с TCP, а приложения клиентов будут располагаться на desktop (если это как-то уточнит мой вопрос)
Нет. Выделять 100500 портов под каждый вид запросов - иррационально.
Нужен какой-нибудь протокол поверх TCP - например HTTP
Если хотите реализовать свой - посмотрите, как устроен он, например.
Что же, звучит правдоподобно. Меня изначально терзали сомнения насчет выделения отдельных портов для обработки определенного запроса. Спасибо за ответ!
Однако я извинюсь за еще один вопрос и хотел бы уточнить в каком направлении (теме) конкретно мне необходимо копать? Заранее спасибо за ответ
Sparrow1488, ну вот почитай, как устроен HTTP, он достаточно простой, чтобы понять.
Ещё есть 1 проект на гитхабе - это простой индексатор для полнотекстового поиска.
У него есть апи поверх TCP со своим собственным протоколом. Этот протокол даже проще, чем HTTP - можешь посмотреть на него: https://github.com/valeriansaliou/sonic/blob/maste...
Но я советую всё-таки взять HTTP и готовые реализации клиента (HttpClient) и сервера (ASP NET Core) для него.
как мне фильтровать полученные данные и по каким критериям
После подключения клиент должен начать отправлять запросы к серверу. И первыми байтами в запросе должны быть: длинна пакета + тип запроса. Далее, если необходимо, добавляем дополнительную информацию. Собственно по типу запроса в пакете и будем решать, что отвечать.
Вы принимаете сообщение вида байты=порт+ip+нагрузка, где нагрузка, очевидно, вам известна и десериализуема. А дальше уже дело программное, как и чем вы будете фильтровать и парсить байты.
p.s.
Лично мне удобнее использовать протоколы аля stateless X over JSON over UTF-8 over TCP.
То-есть, правильно ли я понимаю, что использование отдельных портов под конкретные задачи допустимо? Поскольку я юный масленок и лишь с пол года вожусь с сетью, то на данный момент для реализации своих целей верным нахожу лишь данный способ. Естественно, я могу ошибаться, поэтому и задал вопрос
Если необходимость выделения задачи обмена данных, отделяемого в отдельный порт имеет смысл.
Исторически смотри выделение потока обмена содержимого файла из потока управления протокола ftp.
Зависит от кучи всего, посидеть порисовать разложить по полочкам
Если взглянуть на вопрос в ключе потенциальных повышений нагрузки и расширения функционала - то один порт, на одном хосте окажутся узким местом. Так что можно смотреть и шире - сервисы расползутся по разным хостам и т.п. Или не смотреть на это.