Элегантный API для удаленного управления / демона на основе C (IPC / RPC)? - PullRequest
1 голос
/ 03 ноября 2010

У меня есть демон (который должен быть написан на C), который должен иметь пульт, как это делают обычные медиаплееры:

mediaplayer-rc --enqueue /path/to/song.mp3

Если mediaplayer-daemon не запущен, он запускается пультомконтроллер.Пульт будет передавать сообщение.

Я выбрал подход, который показался мне наиболее интуитивным:

  • Клиентское приложение пытается подключиться () и запускает демон, если может 't
  • Клиент использует argp для анализа параметров в структуре
  • Клиент отправляет структуру через сокет
  • Сервер получает структуру и интерпретирует это

У меня есть простая демонстрационная реализация , использующая сокеты libev и unix на github .

По моим соображениям, было проще написать клиент на C,можно вызывать из других языков с их версией system(), чем пытаться заставить другой язык правильно pack struct или заставить библиотеку C анализировать какой-то другой формат.

Но я не думаю, чточто это особенно элегантное решение.

Другая возможность - использовать JSON.В итоге использование парсера JSON в vanilla C, вероятно, будет гораздо сложнее, чем анализатор args.В результате JSON (или YAML) входит в стандартные библиотеки практически всех других языков.

Есть предложения?Кто-нибудь знает, как эта песня, gimp, itunes и другие приложения решают эту проблему?

1 Ответ

1 голос
/ 03 ноября 2010

Я не могу рекомендовать готовую библиотеку - вместо этого я предлагаю вам взглянуть на Music Player Daemon . Он использует очень простой текстовый протокол для удаленного управления всем приложением. Есть несколько клиентов (с кодом), на которые вы также можете посмотреть.

...