2010-05-11 3 views
0

В настоящее время я работаю над системой Server-Client, которая станет основой моего приложения. Мне нужно найти лучший способ отправить запросы и обработать их на стороне сервера.Как обрабатывать запросы сервера-клиента

Серверный должен быть в состоянии обрабатывать запросы, как этот один:

getPortfolio -i 2 -d все

В старом проекте я решил послать такой запрос как строку и серверное приложение должно было искать первую часть строки («getPortfolio»). После этого серверное приложение должно было найти правильный метод на карте, которая связывает методы с первой частью строки («getPortfolio»). Вторая часть («-i 2 -d all») передана как параметр, и сам метод должен был обрабатывать эту строку/параметр.

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

Rgds Layne

+0

Трудно понять, что именно вы спрашиваете. У вас есть проблема с сокетами или в отношении общего алгоритма синтаксического анализа? Это (AFAIK) две разные концепции. – ereOn

ответ

0

Мне кажется, у Вас есть два разных вопроса.

Для сокетной части я предлагаю вам использовать Beej's guide to socket programming, если вы хотите иметь полный контроль над тем, что вы делаете. Если вы не хотите, чтобы у вас не было времени на обработку этой части, вы можете просто использовать библиотеку сокетов C++. Их много; До сих пор я использовал только this one, но другие могут быть просто хорошими (или даже лучше).

Что касается вашего алгоритма синтаксического анализа, вы можете сначала записать все о формате сообщения, поэтому у вас будет строгое руководство. Затем шаг за шагом:

Сначала извлеките «первое слово» и просто сохраните следующие параметры в некотором списке. Проверьте правильность первого слова и, если оно известно. Если «первое слово» не соответствует какой-либо из предопределенных существующих функций, просто проигнорируйте сообщение (и, в конце концов, сообщите об ошибке клиентскому приложению).

Как только у вас есть соответствующая функция, просто назовите ее передачей остальных параметров.

Таким образом, каждая функция выполняет определенную задачу, и ваш код будет разделен элегантным способом.

К сожалению, мне трудно быть более явным, поскольку мы как-то не имеем деталей здесь.