0

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

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

4

3 回答 3

1

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

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

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

于 2014-04-02T11:35:29.017 回答
1

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

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

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

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

于 2014-04-02T11:59:58.387 回答
1

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

于 2014-04-02T11:25:30.320 回答