目前我正在Windows上开发一个多进程桌面应用程序。这个应用程序将是一个封装好的应用程序,将部署在世界各地的客户机器上。虽然我们可以对机器有广泛的规格要求——例如Windows XP SP3与.Net 4.0 CF,但我们无法控制它们,并且我们不能过于具体地规定它们的配置——例如我们不能指定机器必须具有cuda 1.4的图形处理器等。
其中一些进程是托管的(.Net 4.0),而其他进程是非托管的(C++ Win32)。这些进程需要共享数据。我到目前为止评估的选项是:
- Tcp sockets
- 命名管道
管道似乎表现稍微好一些,但对于我们的需求——两者的性能都是可接受的。而套接字给了我们在未来跨机器(和操作系统——我们希望最终支持非Microsoft的操作系统)的灵活性,因此我们更喜欢使用套接字。
然而——我的主要担忧是——如果我们使用Tcp sockets——我们是否可能会遇到防火墙问题?有没有其他人部署过使用TCP进行IPC的桌面应用程序/程序,并遇到问题?如果有——是什么样的问题?
我知道这是一个相当开放的问题,我很乐意重新表述。但我真的想知道我们可能会遇到什么样的潜在问题。
编辑:为了更好地阐明——我们只传输一些POD(ints,floats和字符串)。我们构建了一个抽象层,提供了两种模式——请求/响应和订阅。传输层已经被抽象化,目前我们有两个实现——基于管道和基于TCP。