Каков наилучший способ реализации кроссплатформенного, многопоточного сервера на C / C ++? - PullRequest
10 голосов
/ 20 декабря 2008

Часть команды разработчиков, с которой я работаю, получила задачу написать сервер для интеграции с нашим продуктом. У нас есть несколько низкоуровневых сенсорных устройств, которые предоставляют C SDK, и мы хотим поделиться ими по сети для использования людьми, собирающими данные. Звучит просто, правда? Кто-то подключит сенсорное устройство к своей машине в одной части здания и запустит наш сервер, тем самым предоставив доступ к устройствам в остальной части сети. Затем клиент подключится к этому серверу через наше приложение и получит показания датчика с устройства.

Я создал простой, независимый от языка сетевой протокол и эталонную реализацию на Java. Проблема заключается в создании реализации, которая будет работать с нашими устройствами, которые предоставляют только SDK, написанный на C. Мы думали сделать следующее:

  1. Создание потоков опроса, которые собирают и хранят самые последние показания с каждого подключенного устройства.
  2. Используйте многопоточный сервер, чтобы раскрутить каждое входящее соединение с рабочим потоком.
  3. Когда рабочий поток получает запрос на считывание датчика, самое последнее значение, собранное потоком опроса, отправляется обратно клиенту.

Это много потоков, особенно в C. Итак, для обзора, общие требования:

  • Работает на компьютерах с Windows XP / Vista, Linux и OS X
  • Написано на C или C ++, для взаимодействия с C SDK у нас есть
  • Принимает переменное количество одновременных подключений (рабочих потоков)
  • Должен использовать потоки, не разветвляться (не хочу иметь дело с другим уровнем IPC)

Кто-нибудь может предложить библиотеку и, желательно, пример кода, чтобы начать использовать?

Ответы [ 11 ]

0 голосов
/ 20 декабря 2008

Используйте кроссплатформенный API или создайте свой собственный API, который вы меняете в каждой архитектуре.

Также исправьте это: http://www.goingware.com/tips/getting-started/

...