Java 服务器到客户端的通信方法

Java 服务器到客户端的通信方法,java,android,spring,long-polling,retrofit,Java,Android,Spring,Long Polling,Retrofit,我不认为我的问题是原创的,也许我已经有了我的答案,但我觉得有点失落 我有一个安卓盒子,它是存在的客户端,从服务器检索信息,然后显示这些信息。客户端每隔一秒钟就向服务器打一次电话,检查信息是否有变化。现在这还可以,但是当我们有500个客户端每秒访问一次服务器时,这将开始变得很沉重 问题: 有没有一种方式可以让交流以相反的方式进行。我希望服务器告诉客户端何时有更新,而不是客户端到服务器 我们目前正在使用KDubb的改进,通信工作得很好,但我认为它不会实现我们所期望的,或者会实现吗?我知道您可以进行异

我不认为我的问题是原创的,也许我已经有了我的答案,但我觉得有点失落

我有一个安卓盒子,它是存在的客户端,从服务器检索信息,然后显示这些信息。客户端每隔一秒钟就向服务器打一次电话,检查信息是否有变化。现在这还可以,但是当我们有500个客户端每秒访问一次服务器时,这将开始变得很沉重

问题: 有没有一种方式可以让交流以相反的方式进行。我希望服务器告诉客户端何时有更新,而不是客户端到服务器

我们目前正在使用KDubb的改进,通信工作得很好,但我认为它不会实现我们所期望的,或者会实现吗?我知道您可以进行异步通信,但我不知道客户端地址,因为它位于家庭或企业的某个本地网络上,我不希望客户担心防火墙或路由器问题

长轮询能实现我所描述的吗?有没有其他技术比长时间轮询更有效,或者改型后可以实现我想要的功能


我使用的是Spring平台,我们正在与Android进行通信

如果要从服务器端推送,另一个选择是打开套接字连接。然而,听上去,如果你走这条路线,每秒查询500次,你可能需要管理更多的连接。我对您的要求一无所知,但从您每秒500次的点击率来看,我认为长时间轮询可能是一种有效的方法,轮询无疑是更新客户端的一种低效方法。您应该考虑使用WebSoFosits来构建Android WebSoClient客户端库,仅仅是谷歌WebSooSosikAndroid。使用Websocket,服务器将能够在需要时异步更新基于Websocket的客户端应用程序。还有一种安全形式的WebSocket协议wss://如果您担心传输数据的安全性,可以使用它。

因此,经过大量测试,我发现GCM Google Cloud Messaging是我的应用程序的最佳选择。它使用XMPP,速度非常快。谷歌没有限制你可以来回发送的消息数量,但是你确实需要在android端启用Google play服务。我目前正在使用spring,我需要使用这些库

<dependency>
            <groupId>org.igniterealtime.smack</groupId>
            <artifactId>smack-core</artifactId>
            <version>4.0.3</version>
        </dependency>
        <dependency>
            <groupId>org.igniterealtime.smack</groupId>
            <artifactId>smack-extensions</artifactId>
            <version>4.0.3</version>
        </dependency>
        <dependency>
            <groupId>org.igniterealtime.smack</groupId>
            <artifactId>smack-debug</artifactId>
            <version>4.0.3</version>
        </dependency>
        <dependency>
            <groupId>org.igniterealtime.smack</groupId>
            <artifactId>smack-resolver-javax</artifactId>
            <version>4.0.3</version>
        </dependency>
        <dependency>
            <groupId>org.igniterealtime.smack</groupId>
            <artifactId>smack-tcp</artifactId>
            <version>4.0.3</version>
        </dependency>
        <dependency>
            <groupId>org.igniterealtime.smack</groupId>
            <artifactId>smack-jingle</artifactId>
            <version>4.0.3</version>
        </dependency>
        <dependency>
            <groupId>com.googlecode.json-simple</groupId>
            <artifactId>json-simple</artifactId>
            <version>1.1.1</version>
        </dependency>
这是在使用Maven,我确信我的项目中已经包含了一些其他的项目,但不在这个列表中。在我包含这些库之后,google提供的代码片段几乎不需要修改

长时间的轮询会起作用,套接字也会起作用。然而,考虑到可能的连接数量,我们决定打开许多连接是一个坏主意,这就是为什么我们转向GCM

在GCM中使用spring的例子并不多,所以这里有一些我找到的链接。


警告。GCM似乎不太适合spring。XMPP可以通过sprig单独作为服务安装,但是它不使用Google帮助您使用的代码。如果你发现这个信息是错误的,我欢迎不同的答案

你指的是GCM谷歌云消息吗?你知道这是否可以通过改造实现吗?