用于基于 C 的远程控制/守护程序(IPC/RPC)的优雅 API?
Posted
技术标签:
【中文标题】用于基于 C 的远程控制/守护程序(IPC/RPC)的优雅 API?【英文标题】:An elegant API for a C-based remote-control / daemon (IPC / RPC)? 【发布时间】:2010-11-03 05:58:26 【问题描述】:我有一个守护进程(必须用 C 编写),它应该有一个遥控器,就像普通媒体播放器一样:
mediaplayer-rc --enqueue /path/to/song.mp3
如果mediaplayer-daemon
没有运行,它由遥控器启动。遥控器将传递消息。
我采用了对我来说最直观的方法:
客户端应用程序尝试 connect() 并启动守护程序(如果不能) 客户端使用argp
将参数解析为结构体
客户端通过套接字发送结构
服务器接收结构并解释它
我有一个simple demo implementation using libev and unix sockets on github。
我的理由是,用 C 编写客户端似乎更容易,我可以使用它们的 system()
版本从其他语言调用,而不是尝试将另一种语言正确地添加到 pack
结构或获取 C 库解析其他格式。
但我不认为这是一个特别优雅的解决方案。
另一种可能性是使用 JSON。缺点是在 vanilla C 中使用 JSON 解析器可能比 args 解析器复杂得多。结果是 JSON(或 YAML)在几乎所有其他语言的标准库中。
有什么建议吗?有人知道 songbird、gimp、itunes 和其他带有遥控器的应用程序是如何处理这个问题的吗?
【问题讨论】:
【参考方案1】:我不能推荐一个现成的库 - 相反,我建议您查看 Music Player Daemon。它使用一个非常简单的文本协议来远程控制整个应用程序。有几个clients(带代码)你也可以看看。
【讨论】:
这是一个很好的资源。我想看看其他一些实现,但我认为字符串是最可靠的方法。以上是关于用于基于 C 的远程控制/守护程序(IPC/RPC)的优雅 API?的主要内容,如果未能解决你的问题,请参考以下文章