С сокет отправлять команды в строке - PullRequest
0 голосов
/ 04 мая 2011

Я новичок в программировании сокетов на C / C ++. Я написал клиент и сокет сервера. Они могут отправлять и получать строки. Идея состоит в том, чтобы отправлять команды на сервер в строке. Это может выглядеть примерно так: «GET X» или «SET X 2». Я знаю, как я могу разбить строку. и программе известно, что первое слово в строке является командой, второе - атрибутом, а третье может быть значением в случае SET-Command. Мой вопрос заключается в том, как я могу сказать программе, что если она получает строку «GET X», она должна вызвать функцию get (attribute). Сначала я подумал о коммутационном корпусе, но думаю, что это не лучшее решение для него. На случай, если будет много команд. СПАСИБО

Ответы [ 3 ]

1 голос
/ 05 мая 2011

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

  • Для небольшого числа функций может быть достаточно простого решения на основе O(n) (например, линейного поиска).
  • Подход, основанный на O(log(n)) (например, самобалансирующиеся двоичные деревья ), может быть достаточным и для большего количества операций.
  • Большинство людей прыгают прямо к решению на основе хеш-таблицы из-за теоретических характеристик поиска O(1). Однако это зависит от хорошей хэш-функции, которая сама по себе не является бесплатной с точки зрения стоимости.

Всегда присутствуют временные и пространственные компромиссы. Так что лучше всего составить профиль, прежде чем принимать решение о том, какой подход лучше всего подходит для вашего приложения.

Несмотря на это, такого рода проблемы с отправкой операций были тщательно исследованы. Например, вот один документ , в котором обсуждаются стратегии диспетчеризации операций в реализации CORBA C ++ ORB.

Помимо оптимизации поиска операций, вам, вероятно, придется иметь дело с другими факторами, такими как:

  • Параллелизм : требуется ли вашему приложению параллельная обработка нескольких соединений от клиентов? Распределенный параллелизм часто очень трудно реализовать правильно.
  • Сериализация : как вы будете отправлять и получать данные по сети? Проблемы, с которыми вы можете столкнуться, включают в себя: отправка простого текста может быть медленной, может потребоваться преобразование числовых значений в принимающие платформы порядковый номер , ваши протоколы сериализации могут измениться, что повлияет на ваших пользователей и т. Д.

Существует потенциально много других проблем, с которыми вам придется столкнуться и на стороне клиента. Если это вообще возможно, я бы рекомендовал использовать существующую технологию, подобную RPC, а не изобретать велосипед самостоятельно.

0 голосов
/ 04 мая 2011

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

0 голосов
/ 04 мая 2011

Я думаю, что лучше использовать оператор switch.

Если нет, вы можете использовать карту с командной строкой в ​​качестве ключа и указателем на функцию обратного вызова в качестве значения.

...