我正在设计一个 C++ 服务,它将提供 IPC 接口。然而,为了让客户端更容易使用,我将实现客户端库,它将隐藏所有复杂的通信细节,并向外部提供一个很好的 API 接口。
现在我陷入了困境,在哪里放置包含 IPC 协议的标头(例如消息格式等)。我看到的基本上有两种情况:
所以,基本上问题是哪种方法更正确 -> 图书馆应该依赖于服务还是图书馆上的服务。也许有一些书籍可以让我阅读有关这些内容的内容?
这是小目录树可视化:
Example #1:
-lib
---- example.cpp
---- example.h
---- ipc.h
-service
---- main.cpp
---- ipc.cpp -> includes ipc.h provided by lib
Example #2:
-lib
---- example.cpp -> includes ipc.h
---- example.h
-service
---- main.cpp
---- ipc.cpp
---- ipc.h -> will be installed in the system and later one included by lib
我认为你应该尽力将服务器的代码与任何一个客户端的代码解耦,并将客户端与服务器的实现以及彼此之间解耦。
最好的方法是首先独立声明通信协议,然后使服务器和任何客户端都依赖于该协议。 (我还会将您的
lib
重命名为不太深刻的内容,例如 example_client
,以更好地反映其低地位)。
-communication_definition
---- ipc.h
---- ipc.cpp
-example_client -> (previously lib)
---- example.cpp -> includes ipc.h
---- example.h
-service
---- main.cpp -> includes ipc.h
-client_1
...... -> includes ipc.h
-client_2
...... -> includes ipc.h
为了您客户的利益,这将是有利的