maaGames
@maaGames
Погроммирую программы

Клиент-серверное приложение?

Пишу клиент-серверное приложение с использованием библиотеки Poco.
В пределах одного ПК всё работает нормально, так же, как работало бы через пайпы, вместо сокетов. Проблемы начинаются, когда клиент и сервер находятся на разных ПК (не важно, в локальной сети или через интернет).
Клиент должен подключаться к серверу по сокету, проброшенному в роутэре и фаерволле, после чего на сервере запускается (третья) программа, выполняющая долгие сложные вычисления, передавая в процессе данные клиенту. Т.е. запущенная программа передаёт данные клиенту напрямую, а не через серверный модуль, потому что данных много и часто. Но, ведь для неё выделяется отдельный порт, который не проброшен в роутэре... И клиентов одноврменно может быть больше одного, даже на одном ПК может быть сразу несколько активных клиентов, обращающихся к серверу по одному и тому же проброшенному порту...
Я не понимаю, как мне быть с портами? Один конкретный порт сисадмин может настроить, но для взаимодействия мне нужна куча портов, получается. И куча клиентов будут стучаться на сервер по одному и тому же порту и я плохо представляю, что мне со всем этим делать.
Это моё первое клиент-серверное приложение, я даже не могу толком сформулировать проблему и не знаю, куда мне идти и что читать? Именно С++, именно Poco.
Скажу спасибо за любой совет по существу :)
  • Вопрос задан
  • 231 просмотр
Пригласить эксперта
Ответы на вопрос 2
firedragon
@firedragon
Не джун-мидл-сеньор, а трус-балбес-бывалый.
В чем проблема на одном сокете "жевать " разные пакеты

Packet TYPE
0x01 - 00-FF

TYPE | LENGTH | BODY | CHECKSUM

В BODY отправляете нагрузку, с которой разбирается уже бинарный сериализатор в зависимости от TYPE
И вызывает нужный обработчик
Ответ написан
@res2001
Developer, ex-admin
Прежде чем писать сетевое приложение вы бы немного почитали про то как там все работает, какие могут быть трудности и как их можно обходить.
Если вы до сих пор этого не знаете, то сервер на одном слушающем сокете может работать с кучей клиентов. Если вы используете TCP для обмена, то на каждое соединение с новым клиентом создается новый сокет полноценный сокет. Вы можете этот сокет передать процессу обработчику. Тогда вам не понадобится куча слушающих сокетов.

Не стоит запускать на каждого клиента отдельный вычислительный процесс, если вычисления достаточно ресурсоемкие вы парой десятков клиентов обеспечите DDoS на свой сервер, т.е. ваш сервер может просто умрететь под нагрузкой.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы