Network programming 我应该手工制作和实现网络协议还是使用中间件(如果是的话,是哪种)?

Network programming 我应该手工制作和实现网络协议还是使用中间件(如果是的话,是哪种)?,network-programming,Network Programming,我有一些数据需要在多台机器上的多个服务之间共享。在这种情况下,将数据填充到数据库中或通过http将其洗牌将不起作用,理想情况下,不同的软件需要直接相互通信(或通过一个可以发送和接收数据的中央协调器) 是否建议创建和实施网络协议或使用某种工具进行通信 如果我真的亲自创建了一个协议,它就不必太复杂了。在10种不同的消息类型下,但是对于这个项目,它必须用几种不同的语言重新实现,并且支持unicode。我已经读了很多关于处理套接字的书(也做了一些),但是对于处理我创建的协议没有太多的知识。在这方面有什么

我有一些数据需要在多台机器上的多个服务之间共享。在这种情况下,将数据填充到数据库中或通过http将其洗牌将不起作用,理想情况下,不同的软件需要直接相互通信(或通过一个可以发送和接收数据的中央协调器)

是否建议创建和实施网络协议或使用某种工具进行通信

如果我真的亲自创建了一个协议,它就不必太复杂了。在10种不同的消息类型下,但是对于这个项目,它必须用几种不同的语言重新实现,并且支持unicode。我已经读了很多关于处理套接字的书(也做了一些),但是对于处理我创建的协议没有太多的知识。在这方面有什么好的资源吗


还有像冰和RPC这样的东西看起来很有趣。我的经验限制是每次使用ICE和XMLRPC几天。这是更好的路线吗?如果是这样的话,有哪些工具?

如果不知道您使用的是什么技术和平台,很难给您一个非常具体的答案,因此我将尝试给您一些一般性的反馈

如果您希望连接的系统跨越多个平台和/或技术,您最好使用现有的传输机制和协议,以最大限度地提高您的基础平台已经有一个(或多个)库通过它进行交互的机会。此外,将安全性和其他特性与已知行为集成在一个堆栈中更有可能被记录下来(到处都有示例)。RPC(和ICE,虽然我不太熟悉)有一些有用的功能,但它也需要对环境进行大量控制,安全性可能会很复杂(特别是在不同语言之间传递对象时)

关于避免轮询,这是一个与性能相关的问题;有一些设计模式可以帮助您处理这些事情-如果您了解您需要系统如何工作(例如,观察者模式-有点像“不要打电话给我们,我们会打电话给您”的方法)。您所处的网络环境将决定哪些选项是实际可行的(例如,本地LAN与运行在WAN或internet上的LAN有不同的考虑)。防火墙隧道、VPN穿越等因素应在最终选定的技术配置文件中发挥作用

唯一的另一个主要考虑因素(我现在能想到……)会考虑你需要传递的数据类型。它只是文本,还是需要流式传输二进制对象?编码格式(如XML、JSON或bJSON)会起作用吗?您提到“少于十种消息类型”作为问题的一部分,但这是系统需要传达的唯一信息吗

无论哪种方式,除非现有协议的开销是不可接受的,否则您最好在99%的时间内利用已建立的工作。创造力是伟大的-但商业项目通常受益于众所周知的行为,即使不是最酷或最圆滑的(有点像“只要它有效…”的方法)


最近,我一直使用它在运行不同语言编写的软件的不同机器之间编码和传送数据。这很容易做到,并且省去了设计自定义协议的许多麻烦。

出于好奇,您能否详细说明一下为什么现有协议不能做到这一点?您是否正在实施点对点式代理?您的系统需要存在于什么样的环境中?一个现有的协议不是不可能的,我愿意使用另一个协议来洗牌数据(以及为什么我提到构建在其他工具之上)。我没有想过使用一个特定的现有协议,因为我不知道任何特定的协议可以做到这一点。我能想到的唯一可用的是http,我不想使用它的原因是因为我不想不断地进行轮询。