【问题标题】:Java server-to-server interfaceJava 服务器到服务器接口
【发布时间】:2014-04-02 11:13:49
【问题描述】:

我必须为服务器到服务器的通信设计一个 (java) 接口,但我在这个领域没有经验。

我的服务器从不同来源获取信息。其他服务器应该能够连接到服务器并获取当前信息以及通过推送通知接收更改。接口不应依赖于其他服务器的某些编程语言或操作系统。 我的第一个想法是使用套接字并让套接字保持打开状态以传输更改。 有没有更好的方法?

【问题讨论】:

  • 你看过网络服务吗?
  • 使用消息队列将提供更具弹性的设计并允许负载平衡
  • @zenbeni 网络服务通常运行在 http 上,这本质上是请求/响应,因此推送通知的要求会很困难
  • 您在寻找数据的实时同步吗?您的服务器从不同来源获取数据,它是定期获取数据还是已经在监听事件?即使没有人在收听通知,您是想按需求从其他服务器获取数据还是定期获取数据?
  • 我的服务器会监听事件(即使没有人监听)并且必须发布实时​​数据,所以推送是绝对必要的。

标签: java push server-communication


【解决方案1】:

我想在 Java EE 环境中工作最简单的方法是使用 Web 服务。但如果不是这种情况和/或您需要推送,我建议使用一些库。例如xSocket,它使用非阻塞 IO 套接字,可以异步发送和接收任何字符串消息。从那里你可以使用例如 JAXB binders 来发送 XML 消息或任何其他格式。

【讨论】:

  • 我希望有能够实现我想要实现的框架。 xSocket 是否适用于非 Java“客户端”,例如在 .NET 平台上运行?
  • 是的,您当然可以从 .net 进行连接,或者事实上可以从具有 TCP 连接功能的任何其他合作伙伴进行连接(我猜您可以使用所有可以执行低级操作的语言以及小程序、Flash 客户端)等等,但不是普通的浏览器)。然后你可以发送你喜欢的格式的 XML、JSON 或自定义字符串命令。
  • 我选择了这个答案而不是其他答案,因为套接字真正独立于客户端平台,不需要任何额外的软件。感谢您的所有回答!
【解决方案2】:

由于您需要能够将数据推送到客户端,虽然这显然可以使用套接字,但它们确实引入了其他复杂性,因此,恕我直言,最简单的解决方案是使用消息队列。

要使用消息队列,客户端会将消息发布到服务器正在侦听的已知队列。此消息应包含replyTo 目标(通常是客户端拥有的临时队列)。收到消息后,服务器应注册replyTo 目的地,将任何通知发送到此replyTo 目的地。

我通常发现对所有数据(初始加载和更新)使用通知机制更容易,因为它可以防止客户端必须支持两种机制来获取数据。这很容易做到,因为您的通知消息需要指出正在发生的事件类型(例如添加、更新、删除),并且您只需在此列表中引入一个初始化类型。

【讨论】:

    【解决方案3】:

    如果您需要实时数据的良好性能,您可以看看 redis,它是一个 nosql 内存数据库,支持发布/订阅,并且有许多适用于所有主要语言的客户端。

    您的发布服务器将监听事件并将数据推送到 redis,这要归功于 jedis(Java 的 redis 客户端),然后感谢 redis 的发布/订阅支持,您订阅 redis 频道的其他服务器将获得更新.基本上你使用 redis 作为消息代理,它运行良好。如果不想在读取上增加智能,redis 绝对是一个不错的选择。

    但是,您需要将其部署在 linux 服务器上(没有 windows 用于生产,但您可以使用 redis 的 windows 端口进行开发)。

    Redis 增加了复杂性,但也有许多很棒的功能(zset 非常适合存储数据排名),并且由于它都在内存中(你必须检查你的服务器上是否有足够的 RAM),性能非常好很棒。

    【讨论】:

      猜你喜欢
      • 2018-08-31
      • 2010-11-03
      • 1970-01-01
      • 1970-01-01
      • 2019-08-11
      • 2013-03-20
      • 1970-01-01
      • 1970-01-01
      • 2019-10-21
      相关资源
      最近更新 更多