跨语言网络交换设计

时间:2012-06-12 10:05:15

标签: java networking casting

过去两天我一直在寻找关于stackoverflow和网络的答案,我找不到合适的答案。但是我肯定不是第一个这样做的人:

我正在用Java实现p2p覆盖。目的是在同伴之间交换消息。消息由Message类表示,Message类包含发送者,接收者和内容。内容表示为扩展Context接口的类(对于每种类型的消息,创建一个扩展Context的新类,它可以包含其他字段,它是特定于应用程序的)。上下文的className也存储在消息中。但是,我希望保持通过网络语言无关的传输消息,这就是为什么我在将它们转换为JSON对象之前将其转换为通过网络传输之前的原因。到目前为止,没有什么了不起的。

接收消息时出现问题:我收到一个JSON对象,我假设它是Message类(执行类型检查)。它包含作为className存储在消息中的类的内容。

  1. 是否明智地存储类似的类名,然后创建类的实例以在接收消息时动态存储内容(即内容将是SpecificContent类的实例但被视为接口内容)。然后,内容将在应用程序级别提供,并可以进行转换以访问其特定方法。

  2. 有没有更好/标准的方式通过网络发送消息而不是简单地序列化java类? (在这种情况下,它无法与用C ++编写的程序等进行通信)(没有谈论CORBA,这不过是一台Rube Goldberg机器)

  3. 非常感谢您的时间,感谢任何评论/问题/答案。

    此致

    B.F。

2 个答案:

答案 0 :(得分:0)

您的异构系统集成面临挑战。你正在做的是松散地遵循的做法(至少在原则上)。

基于文本(在此案例中为JSON)协议用于在异构系统之间交换信息的想法是系统集成或互操作性的核心。事实上,网络服务的标准做法只不过是这样。这里XML用作异构系统中基于文本的协议。

回答你的问题:

  1. 如果您使用自己的协议,那么可以发送一个类名,因为它是您解释所收到的邮件对象的地方。如果您使用SOAP-Web服务等标准实践,则会自动处理这些事情。您需要定义的只是名为WSDL的消息交换的服务合同

  2. XML是互联网的语言。使用xml通过网络交换信息。对于所有广泛使用的语言(Java,C#,PHP等),现成的程序可用于将本机语言对象转换为等效的xml表示(例如Jaxb用于将Java对象转换为xml表示)。

答案 1 :(得分:0)

当选择特定的消息传递层实现时,它通常归结为在性能和灵活性之间取得平衡。最灵活,性能最差的是基于文本的自描述编码(JSON,XML / SOUP,YAML,标签/类型/值变体等)SOUP Web服务或FIX就是一个例子,性能最好的是对于固定字段偏移和二进制编码,ASN.1就是一个例子。平衡但偏向后者的是Google Protocol Buffers。