Websocket 在您列出的所有客户端中均可用。
通常,像 Atmoshpphere 这样的框架会处理降级到其他类型的传输(例如,长轮询而不是 Websocket)并为您抽象出差异。 Websockets 是长轮询试图解决的问题的标准 - 即服务器端推送。
我已经在 Jetty 上为 Dropwizard 0.7.0 完成了 websockets - 但请阅读我在 DW google 组中链接到的线程。
See http://www.eclipse.org/jetty/documentation/9.0.6.v20130930/websockets.html
and https://groups.google.com/d/msg/dropwizard-user/doNCx_35urk/5PIvd8_NHIcJ
基本上,您将一个 websocket-servlet 添加到 DW 来协商 websocket 会话:
final ServletRegistration.Dynamic websocket = environment.servlets().addServlet(
"websocket",
new MyWebSocketServlet(
environment.getObjectMapper(),
environment.metrics(),
configuration.getKafkaConfig()
)
);
websocket.setAsyncSupported(true);
websocket.addMapping("/websocket/*");
以及 websocket servlet:
public class MyWebSocketServlet extends WebSocketServlet{
@Override
public void configure(WebSocketServletFactory factory) {
factory.register(MyWebSocketEndpoint.class);
}
}
最后是您的端点,它由 jetty websocket 库实例化:
@WebSocket
public class MyWebSocketEndpoint {
@OnWebSocketMessage
public void onMessage(Session session, String s) throws IOException {
session.getRemote().sendString("Returned; "+s);
}
}