【问题标题】:looking for api/protocol over http [closed]通过 http 寻找 api/protocol [关闭]
【发布时间】:2012-04-08 19:45:24
【问题描述】:

我想在我拥有的几个组件之间设计一个协议。每个都可以在不同主机上的单独进程中运行。总是有一个发起者(客户端)和响应者(服务器)。客户端可能使用多种语言 java/c#/c++/cli。我的服务器总是在 java 中。
于是我想到了以下属性:

  • 它应该是纯文本,以便于调试。
  • 它应该允许一侧无缝升级(这意味着没有类序列化和严格的方法签名)。
  • 如果它是一个框架,那么 in 应该很薄(WSDL 看起来对我的需求来说太多了)。

我想通过 tcp 使用 http。
我主要对语法感兴趣,以及 java 中是否存在已经提供此类功能的框架。我依稀记得Spring里有类似的东西。

编辑:我更喜欢瘦框架,而且我担心在 RPC 中更改方法签名会导致竞争力问题。
我找到了this example,它可能满足我的需求,因为我已经在使用jaxb

【问题讨论】:

  • 您想要实现的是“远程过程调用”(RPC),也就是“远程(方法)调用”(RI/RMI)。我建议您阅读并检查一些框架并选择最适合您的框架。

标签: java http frameworks jaxb protocols


【解决方案1】:

您可以查看 REST/ful 服务:

链接的文章还讨论了一些准则,什么时候 SOAP 和什么时候 REST 更适用。

【讨论】:

    【解决方案2】:

    我会选择SOAP。虽然不是最简单的,但几乎所有语言/平台组合都有各种库,而且它非常可扩展。 也可能建议使用 XML-RPC,但 SOAP 是它的继任者,所以我建议不要使用 XML-RPC。

    【讨论】:

      【解决方案3】:

      我会选择 WSDL。它实际上是为了在用各种语言编写的组件之间建立远程通信。我一直在 C#、PHP、C++、Python 和 Java 的繁重负载下使用它很长一段时间,它很棒。 基本上,您所要做的就是实际设计一个真正的协议,而 WSDL 本身并不是该协议 - 在这种情况下,协议将是 WSDL 顶部的一组命令,例如你好命令(某种 ping),登录和注销命令(用于会话),然后是你需要的各种东西。

      【讨论】:

      • 网络服务总是好的。例如,您可以从 Apache CXF 开始。
      【解决方案4】:

      您可以停留在 TCP 级别并使用诸如 zeromq 之类的智能库来处理所有接线。协议本身就是一组消息,可根据您的要求进行调整(与传输基础设施未预先确定的 WSDL 一样)。

      示例(我挑战 WebService 支持者在他们的答案中提供示例;)

      服务器(python 为简洁):

      import zmq
      ctx = zmq.Context()
      socket = ctx.socket(zmq.REP)
      socket.bind('tcp://0.0.0.0:12345')
      while True:
          message = socket.recv()
          # 'status' and 'shutdown server' would be part of your protocol
          if message == "status":
              socket.send("I'm ok")
          elif message == "shutdown server":
              socket.send("Ok, bye bye")
              break
          # implement your other commands here ...
      socket.close()
      

      一个客户:

      import zmq
      ctx = zmq.Context()
      socket = ctx.socket(zmq.REQ)
      socket.connect('tcp://localhost:12345')
      socket.send('shutdown server')
      reply = socket.recv()
      print(reply)
      

      就是这样。是的,zeromq 带有 30 多种语言绑定。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-04-14
        • 1970-01-01
        • 1970-01-01
        • 2016-04-30
        • 1970-01-01
        • 2023-04-06
        • 2011-01-02
        • 2013-11-01
        相关资源
        最近更新 更多