与没有 GCM 的推送服务器的持久 http 连接

Posted

技术标签:

【中文标题】与没有 GCM 的推送服务器的持久 http 连接【英文标题】:persistant http connection to a push server without GCM 【发布时间】:2014-10-31 12:17:11 【问题描述】:

问题很简单:

    连接到 HTTP 服务器并保持连接打开几分钟。 每次接收数据时触发回调函数,而不是在连接完成接收所有数据时触发。

【问题讨论】:

我不确定我是否正确理解了您想要实现的目标,但如果您正在考虑推送到 android,您可能需要考虑 GCM。 哦,如果我想推送到 android,我会使用 GCM,不,我想制作一个应用来绑定到预先存在的推送服务。 【参考方案1】:

好的,最好的方法是使用 TCP 连接来处理它(并编写一些代码来解析 http)。

我在一个线程中使用了一个 Socket(来自 java.net.Socket),它循环、休眠然后检查缓冲区中是否有任何新数据。

重量很轻,效果很好。因为我只想在服务器在持久连接上呈现数据时检索数据,所以不需要任何 http 开销。

确实需要伪造一个 http get 请求来启动它:

            PrintWriter pw = new PrintWriter(socket.getOutputStream());
            pw.println("GET / HTTP/1.1");
            pw.println("Host: www.example.com");
            pw.println("");
            pw.flush();

【讨论】:

以上是关于与没有 GCM 的推送服务器的持久 http 连接的主要内容,如果未能解决你的问题,请参考以下文章

Gcm 与其他推送服务

GCM + AppEngine - 应用没有收到推送通知

APNs 证书与 GCM 的连接,用于不同类型的应用程序

GCM 如何在推送通知中识别设备?

Laravel 5.1 GCM 推送通知 SSL 错误

在 GCM 中发送推送通知时出现未经授权的错误