我需要在多台计算机上的多个服务之间共享一些数据。将数据填充到数据库中或通过http对其进行混洗将无法在这种情况下工作,理想情况下,不同的软件需要直接相互通信(或通过一个可以发送和接收的中央协调器)。
是否建议创建并实施网络协议或使用某种工具进行通信?
如果我自己走了创建协议的路线,那就不一定非常复杂了。在10种不同的消息类型下,但它必须以几种不同的语言为该项目重新实现,并支持unicode。我已经阅读了很多(并做了一些)处理套接字,但是在处理我创建的协议方面知之甚少。这有什么好的资源吗?
还有像ICE和RPC这样的东西看起来很有趣。我的经验限制是每天使用ICE和XMLRPC几天。这是更好的路线吗?如果有的话,那里有什么工具?
答案 0 :(得分:1)
最近,我一直在使用Google Protocol Buffers在运行以不同语言编写的软件的不同机器之间编码和传送数据。这很容易做到,并且消除了设计自定义协议的麻烦。
答案 1 :(得分:0)
如果不知道您正在处理哪些技术和平台,很难给出一个非常具体的答案 - 所以我会尝试给您一些一般性的反馈。
如果您希望连接的系统跨越多个平台和/或技术,您可能更好地使用现有的传输机制和协议,以最大限度地提高基础平台已有库(或多个库)的机会)通过它进行交互。此外,将具有已知行为的堆栈中的安全性和其他功能集成在一起更有可能被记录下来(示例浮动)。 RPC(和ICE,虽然我对它不太熟悉)有一些有用的功能,但它还需要对环境进行大量控制,并且安全性可以复杂化(特别是如果你在不同语言之间传递对象)。
关于避免民意调查,这是一个与绩效有关的问题;有一些设计模式可以帮助你处理这些事情 - 如果你了解你需要系统如何工作(例如观察者模式 - 一种不要打电话给我们,我们将呼叫你的方法)。您正在播放的网络环境将决定哪些选项实际可行(例如,本地LAN将具有与通过WAN或互联网运行的某些选项不同的考虑因素)。防火墙隧道,VPN遍历等因素应该参与您最终选择的技术配置文件。
唯一的另一个主要考虑因素(我现在可以想到...... ;-))将考虑您需要传递的数据类型。它只是文本,还是需要流二进制对象?编码格式(如XML或JSON或bJSON)可以解决这个问题吗?您提到“少于十种消息类型”作为问题的一部分,但这是系统需要传达的唯一信息吗?
无论哪种方式,除非现有协议的开销是不可接受的,否则你最好在99%的时间内利用既定工作。创造力是伟大的 - 但商业项目通常受益于众所周知的行为,即使不是最酷或最简单的(“只要它有效......”的方式)。
HTH!