我们打算设计一个有三个“层”的系统。
HQ与与用户进行双向通信的节点进行双向通信。用户从不与总部沟通,反之亦然。
从HQ(使用Delphi)和用户iPad的原生桌面应用程序判断Windows应用程序的权力。他们对节点没有意见。
如果有令人信服的技术论据,我可能能够在Windows程序中将它们从“法令”下降到“更喜欢”(并且,对于isntance,使其基于浏览器)。节点没有GUI,只是坐在那里玩中间人。
这些东西进行通信的最佳方式是什么(SOAP / HTTP / AJAX / jQuery / home-brewed-protocol-on-top-of-TCP / something-else?)最好使用相同的协议结束结束,或者hq< - >节点和节点< - > iPad的不同协议?
这两个接口中的每一个的两端都可能希望启动一个事务(如果我自己编写协议,我可以很容易地做到这一点),那么我应该使用push / pull / long-poll还是什么?
我希望这种描述有意义。如果没有,请提问。感谢。
更新
文件大小通常低于1MB,没有可能高于10MB甚至5MB。在确认第一个文件之前,不会发送第二个文件。
文件从HQ“下坡”流向节点到iPad。文件永远不会“上坡”,但会有一些小的数据包(除了acks),这些数据包是由iPad上的用户操作启动的。这些将转到本地节点,然后转到总部。我们可能正在谈论< 128字节。
我想也会有一般的控制和在各个方向以低速率维护流量。
答案 0 :(得分:5)
对于推/拉(发布/订阅或对等通信),可以使用跨平台消息代理。我不确定是否有用于Microsoft Message Queue(MSMQ)的(iOS)客户端库,但我也会评估开源解决方案,如HornetQ,Apache ActiveMQ,Apollo,{{3 },Apache OpenMQ或QPid。
所有这些解决方案为分布式消息传递提供了可靠的基础,例如故障转移,群集,持久性,高性能和许多客户端连接。在此基础结构消息上可以交换任何内容类型(JSON,二进制,纯文本),并且在顶部消息可以包含路由和优先级信息。它们还支持事务性消息传递。
Delphi和Free Pascal RabbitMQ用于许多企业级质量的开源消息传递产品。 (我是其中一些人的作者,支持ActiveMQ,Apollo,HornetQ,OpenMQ和RabbitMQ)
答案 1 :(得分:2)
查看MessagePack:http://msgpack.org/
此外,这里有关于SO的更多RPC讨论:
答案 2 :(得分:1)