如何在这个系统内进行通信?

时间:2011-04-08 02:43:06

标签: delphi web-applications network-programming communication

我们打算设计一个有三个“层”的系统。

  1. HQ,只有一台服务器
  2. 区域性的许多“节点”
  3. 用户,使用iPad。
  4. 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字节。

    我想也会有一般的控制和在各个方向以低速率维护流量。

3 个答案:

答案 0 :(得分:5)

对于推/拉(发布/订阅或对等通信),可以使用跨平台消息代理。我不确定是否有用于Microsoft Message Queue(MSMQ)的(iOS)客户端库,但我也会评估开源解决方案,如HornetQApache ActiveMQApollo,{{3 },Apache OpenMQQPid

所有这些解决方案为分布式消息传递提供了可靠的基础,例如故障转移,群集,持久性,高性能和许多客户端连接。在此基础结构消息上可以交换任何内容类型(JSON,二进制,纯文本),并且在顶部消息可以包含路由和优先级信息。它们还支持事务性消息传递。

Delphi和Free Pascal RabbitMQ用于许多企业级质量的开源消息传递产品。 (我是其中一些人的作者,支持ActiveMQ,Apollo,HornetQ,OpenMQ和RabbitMQ)

答案 1 :(得分:2)

查看MessagePack:http://msgpack.org/

此外,这里有关于SO的更多RPC讨论:

你可能会对ICE感兴趣:http://zeroc.com/index.html
他们有一个iOS层:http://zeroc.com/icetouch/index.html

答案 2 :(得分:1)

恕我直言,决定使用什么技术的要求太少了。交换的数据,频率,大小是多少?是否有请求/响应时间限制?在您深入了解您的需求之前,切勿开始选择技术。