Бережливый клиент-сервер нескольких ролей - PullRequest
3 голосов
/ 25 марта 2010

это мой первый вопрос, поэтому извините, если форма неправильная!

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

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

Есть предложения ???

Спасибо!

Ответы [ 2 ]

1 голос
/ 28 июня 2010

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

Надеюсь, это поможет:)

1 голос
/ 26 марта 2010

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

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

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

...