Объектно-ориентированные сети

Я написал несколько сетевых систем и хорошо знаю, как работают сети. Однако у меня всегда есть функция приема пакетов, которая представляет собой гигантский оператор переключения. Это начинает меня доходить. Я бы предпочел красивый элегантный объектно-ориентированный способ обработки получения пакетов, но каждый раз, когда я пытаюсь найти хорошее решение, я всегда терплю неудачу.

Например, допустим, у вас есть сетевой сервер. Он просто ждет ответов. Приходит пакет, и серверу необходимо проверить его, а затем решить, как с ним обращаться.

На данный момент я делал это, включив идентификатор пакета в заголовке, а затем выполнял огромное количество вызовов функций, обрабатывающих каждый тип пакета. В сложных сетевых системах это приводит к монолитному оператору switch, и мне очень не нравится обращаться с ним таким образом. Один из способов, который я рассмотрел, - это использовать карту классов обработчиков. Затем я могу передать пакет соответствующему классу и обработать входящие данные. Проблема, с которой я столкнулся, заключается в том, что мне нужен способ «зарегистрировать» каждый обработчик пакетов на карте. Обычно это означает, что мне нужно создать статическую копию класса, а затем в конструкторе зарегистрировать ее в центральном обработчике пакетов. Хотя это работает, на самом деле кажется неэлегантным и неудобным способом справиться с этим.

Изменить : В равной степени было бы идеально иметь хорошую систему, работающую в обоих направлениях. т.е. структура классов, которая легко обрабатывает отправку тех же типов пакетов, что и их получение (очевидно, с помощью различных функций).

Может ли кто-нибудь указать мне на лучший способ обработки входящих пакетов? Мы очень ценим ссылки и полезную информацию!

Приношу свои извинения, если я не описал свою проблему хорошо, поскольку моя неспособность описать ее хорошо также является причиной того, что мне так и не удалось найти решение.

16
задан Wim Coenen 8 February 2011 в 20:47
поделиться