Я написал несколько сетевых систем и хорошо представляю, как работает сеть. Однако я всегда получаю функцию приема пакетов, которая является гигантским оператором переключения. Это начинает доходить до меня. Я бы предпочел хороший элегантный объектно-ориентированный способ обработки принимаемых пакетов, но каждый раз, когда я пытаюсь найти хорошее решение, я всегда заканчиваю неудачей.
Например, допустим, у вас есть сетевой сервер. Это просто ожидание ответов. Пакет приходит, и сервер должен проверить пакет, а затем он должен решить, как его обработать.
В данный момент я делаю это, включая идентификатор пакета в заголовке, а затем получаю огромное количество вызовов функций, которые обрабатывают каждый тип пакета. Со сложными сетевыми системами это приводит к монолитному переключению, и мне действительно не нравится обрабатывать его таким образом. Одним из способов, который я рассмотрел, является использование карты классов-обработчиков. Затем я могу передать пакет соответствующему классу и обработать поступающие данные. Проблема, с которой я столкнулся, заключается в том, что мне нужен какой-то способ «зарегистрировать» каждый обработчик пакетов на карте. Обычно это означает, что мне нужно создать статическую копию класса, а затем в конструкторе зарегистрировать ее в центральном обработчике пакетов. Несмотря на то, что это работает, это действительно кажется не элегантным и сложным способом справиться с этим.
Редактировать : Точно так же было бы идеально иметь хорошую систему, которая работает в обоих направлениях. то есть структура класса, которая легко обрабатывает отправку тех же типов пакетов, что и их получение (очевидно, с помощью различных функций).
Может кто-нибудь указать мне на лучший способ обработки входящих пакетов? Ссылки и полезная информация приветствуются!
Извиняюсь, если я не описал свою проблему хорошо, так как моя неспособность описать ее хорошо также является причиной, по которой мне так и не удалось найти решение.