从app引擎servlet异步发送数据到客户端的简单方法

时间:2013-01-30 13:04:03

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

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

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

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

问题是API应该提供一种在给定更改发生后立即异步向AP​​I客户端发送数据的方法。

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

在我看来,更好的解决方案是要求API用户减少工作量,“长轮询”,提供一个API动作来保存响应,直到服务器有东西返回或发生“超时”。例如:

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

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

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

2 个答案:

答案 0 :(得分:0)

这些是可用的不同方法

  1. WebSockets(HTML5的一部分)
  2. Long Polling and Commet
  3. 轮询
  4. 使用Websockets是最简单的方法。但为了实现这一点,我们应该确保客户端浏览器是最新的,服务器端也支持它。 tomcat 7.0.32及更高版本中提供了一个名为WebSocketServlet的新servlet。

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

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

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

答案 1 :(得分:0)

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