我创建了一个提供网站服务的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请求。
答案 0 :(得分:0)
这些是可用的不同方法
使用Websockets是最简单的方法。但为了实现这一点,我们应该确保客户端浏览器是最新的,服务器端也支持它。 tomcat 7.0.32及更高版本中提供了一个名为WebSocketServlet的新servlet。
PS:我不确定app引擎是否能够实现websocket服务器端。
长轮询和轮询是较旧的方法。但由于浏览器兼容性问题,它们仍在使用。
您可以使用 Atmosphere框架,其中包含用于websockts,长轮询和轮询的回退机制。
答案 1 :(得分:0)
GAE上唯一的异步服务器到客户端通信可通过Channel API获得。不幸的是它只是javascript,所以你只能在浏览器中使用它。