我有一个守护进程(必须用 C 编写),它应该像普通媒体播放器一样有一个 Remote :
mediaplayer-rc --enqueue /path/to/song.mp3
如果 mediaplayer-daemon
未运行,则由远程 Controller 启动。 Remote 将传递消息。
我采用了对我来说最直观的方法:
- 客户端应用程序尝试连接(),如果不能则启动守护进程
- 客户端使用
argp
将params解析成一个struct - 客户端通过套接字发送结构
- 服务器接收结构并解释它
我有一个 simple demo implementation using libev and unix sockets on github .
我的理由是,用 C 语言编写客户端似乎更容易,我可以从其他语言调用它们的 system()
版本,而不是尝试使用另一种语言来 pack
正确的结构或让 C 库解析一些其他格式。
但我不认为这是一个特别优雅的解决方案。
另一种可能性是使用 JSON。其结果是,在 vanilla C 中使用 JSON 解析器可能比 args 解析器复杂得多。结果是 JSON(或 YAML)出现在几乎所有其他语言的标准库中。
有什么建议吗?有人知道 songbird、gimp、itunes 和其他带 Remote 的应用程序如何处理这个问题吗?
最佳答案
我不能推荐现成的库 - 相反,我建议您查看 Music Player Daemon .它使用非常简单的文本协议(protocol)来远程控制整个应用程序。有几个clients (带代码)你也可以看看。
关于c - 用于基于 C 的远程控制/守护进程 (IPC/RPC) 的优雅 API?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4084541/