2010-03-25 2 views
3

это мой первый вопрос, извините, если форма неправильная!Thrift client-server несколько ролей

Я пытаюсь сделать бережливый сервер (python) и клиент (C++). Однако мне нужно обмениваться сообщениями в обоих направлениях. Клиент должен зарегистрироваться (вызвать функцию сервера и ждать), а сервер должен прослушивать один и тот же порт для N (N-> 100k) входящих соединений (клиентов). После выполнения некоторых условий серверу необходимо вызывать функции на каждом клиенте, собирать результаты и интерпретировать их.

Я немного смущен, и первые вопросы: «Это можно сделать в« Трэйфе »? Второй вопрос связан с механизмом, который позволит мне двунаправленную связь. Думаю, мне понадобятся две службы. Один с другими функциями клиента с сервером. Но я смущен кодом вызова. Я понимаю одностороннее общение (вызывающие функции с сервера), но с вызывающими функциями с клиентской стороны у меня есть проблема.

Любые предложения ???

Спасибо!

+0

Почему вы используете бережливость? – compie

+0

Было предложено, и мне нужно использовать другую языковую поддержку для клиента и сервера. – dexter

ответ

1

Рассмотрите возможность использования boost::asio для вашей стороны клиента, хотя в зависимости от вашего уровня C++ код может показаться слишком плотным.

Если вы ищете простой пример, посмотрите на: http://www.linuxhowtos.org/C_C++/socket.htm

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

+0

Thrift был предложен как один из способов сделать это ... Ключевым моментом является то, что они должны быть в разных pl (python и C++), , и я просто удивляюсь, может ли это быть сделано в Thrift ??? Кроме того, поскольку ожидается большое количество клиентов, следует избегать многопоточности на стороне сервера. – dexter

1

Поскольку вы говорите, что у вас проблемы с функциями вызова с клиентской стороны, вот пример кода Thrift с Java-сервером и клиентом C++, где клиент вызывает функцию на сервере. http://fundoonick.blogspot.com/2010/06/sample-thrift-program-for-server-in.html

Надеется, что это помогает :)

Смежные вопросы