【问题标题】:Simple way of sending data from appengine servlet to client asynchronously将数据从 appengine servlet 异步发送到客户端的简单方法
【发布时间】:2013-01-14 07:28:10
【问题描述】:

我创建了一个以网站形式提供服务的 Web 应用程序。

我计划创建一个 WebServlet API 以允许其他软件(Web 或桌面)轻松集成我的服务,调用简单的操作如下:

http://www.server_name.com/APIServlet?ACTION=CreateUser&DATA={"username":"username@gmail.com","password":"some_password"}

问题在于 API 还应该提供一种在发生给定更改时立即向 API 客户端异步发送数据的方法。

我知道 Channel API 是实现这一点的更好方法,但 API 用户实现起来相当复杂,特别是在非 javascript 应用程序中。

在我看来,需要 API 用户付出较少努力的更好的解决方案是“长轮询”,它提供一个 API 操作来保持响应,直到服务器有东西要返回或发生“超时”。例如:

    http://www.server_name.com/APIServlet?ACTION=WaitMessage&DATA={"sessionId":"12kdj45jsdj"}

但是 AFAIK 这个解决方案是不可能的,因为 appengine 将请求响应限制为 30 秒。

如何以简单的方式使用 HTTP 请求实现异步服务器 -> 客户端通信。

【问题讨论】:

    标签: java google-app-engine http servlets asynchronous


    【解决方案1】:

    GAE 上唯一的异步服务器到客户端通信可通过Channel API 获得。不幸的是,它只是 javascript,所以你只能在浏览器中使用它。

    【讨论】:

    • 我即将尝试 XMPP。它不像我想的那么简单,但至少它更标准并且独立于网络浏览器。我正在考虑创建一个处理通信并与其源代码共享的库。你怎么看?
    【解决方案2】:

    这些是可用的不同方法

    1. WebSockets(HTML5 的一部分)
    2. 长轮询和通信
    3. 轮询

    使用 Websockets 将是最简单的方法。但是为了让它工作,我们应该确保客户端浏览器是最新的并且服务器端也支持它。在 tomcat 7.0.32 及更高版本中提供了一个名为 WebSocketServlet 的新 servlet。

    PS:我不确定应用引擎是否能够实现 websocket 服务器端。

    长轮询和轮询是较旧的方法。但由于浏览器兼容性问题,它们仍在使用。

    您可以使用 Atmosphere 框架,其中包含用于 websockts 、长轮询和轮询的后备机制。

    【讨论】:

      猜你喜欢
      • 2011-07-22
      • 2013-04-29
      • 1970-01-01
      • 1970-01-01
      • 2014-10-08
      • 2014-04-12
      • 2015-03-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多