Я новичок в программировании сокетов на C/C++. Я написал Client and Server Socket. Они могут отправлять и получать строку. Идея состоит в том, чтобы отправить команды на сервер в строке. Он может выглядеть примерно так: «GET X» или «SET X 2». Я знаю, как я могу разделить строку. и программа знает, что первое слово в строке является командой, вторая - атрибутом, а третья может быть значением в случае SET-Command. Мой вопрос в том, как я могу сказать программе, что если она получает строку «GET X», она должна вызывать функцию get (attribute). Я думал о коммутаторе, но думаю, что это не лучшее решение для него. В случае, если будет много команд. THANK выc socket send команды в строке
ответ
Я думаю, что лучше использовать оператор switch.
Если нет, вы можете использовать карту с командной строкой в качестве ключа и указателем на функцию обратного вызова в качестве значения.
И убедитесь, что ключ существует, иначе программа может взорваться. – Marlon
Один из способов, которым вы могли бы это сделать, - иметь таблицу поиска функций, которую вы могли бы вызвать, в зависимости от команды, которая все вернула char*
, и отправить ответ обратно клиенту. Конечно, вы должны сделать рудиментарную функцию хэширования.
В основном вы можете свести проблему до оптимального способа сопоставления имени операции с вызываемой фактической функцией и действительно ли нужны решения с лучшими характеристиками поиска.
- Для небольшого числа функций может быть достаточно простого решения на основе
O(n)
(например, линейного поиска). - Подход на основе
O(log(n))
(например, self-balancing binary trees) может быть достаточным для дополнительных операций. - Большинство людей прыгают прямо на hash table на основе решения из-за теоретических характеристик поиска
O(1)
. Однако это зависит от хорошей хеш-функции, которая сама по себе не является бесплатной с точки зрения стоимости.
Всегда есть компромиссы во времени и пространстве. Так что лучше всего профилировать, прежде чем решать, какой подход лучше всего подходит для вашего приложения.
Независимо от того, что проблемы с отправкой операций были изучены в значительной степени. Например, вот one paper, где обсуждаются стратегии отправки операций в реализации ORB CORBA C++.
Помимо оптимизации работы поиск, вы, вероятно, приходится иметь дело с другими факторами, такими как:
- параллельности: это приложение требуется обрабатывать несколько соединений от клиентов параллельно? Распределенный параллелизм часто очень сложно реализовать правильно.
- Сериализация: как вы будете отправлять и получать данные по проводам? Проблемы вы можете столкнуться включают: отправка простого текста может быть медленными, численные значения могут должны быть преобразованы в приемных платформах endianness, ваши протоколы сериализации могут измениться, которые будут влиять на пользователь и т.д.
Есть потенциально много других проблемы, с которыми вам придется столкнуться и на стороне клиента.Если это вообще возможно, я бы рекомендовал использовать существующую RPC-подобную технологию, а не изобретать колесо самостоятельно.
Вы можете программировать либо на C, либо на C++, но не на обоих языках одновременно. Пожалуйста, используйте соответствующие теги и укажите, какой язык вы используете. –
Вы в основном используете удаленные вызовы процедур. Если вы не делаете это в образовательных целях, зачем изобретать колесо? Существует много технологий RPC, доступных на нескольких языках программирования. Краткий список этих технологий доступен здесь: http://en.wikipedia.org/wiki/Remote_procedure_call – Void
@Seth Carnegie Технически можно включать файлы C в проект C++, или, возможно, сервер и клиент находятся на разных языках , Ни одна из этих вещей не может быть здесь, но это возможности. – patrickvacek