Java 使用Dropwizard 0.7.0实现长轮询服务器
我正在尝试使用Dropwizard 0.7.0框架实现一个长轮询服务器。有人建议我使用jetty集成。在谷歌搜索之后,我被诸如WebSocket、jetty continuation、Comet之类的东西弄糊涂了 我的问题是,这些东西是什么?我应该选择哪一个?任何例子都是非常感谢的Java 使用Dropwizard 0.7.0实现长轮询服务器,java,websocket,jetty,dropwizard,Java,Websocket,Jetty,Dropwizard,我正在尝试使用Dropwizard 0.7.0框架实现一个长轮询服务器。有人建议我使用jetty集成。在谷歌搜索之后,我被诸如WebSocket、jetty continuation、Comet之类的东西弄糊涂了 我的问题是,这些东西是什么?我应该选择哪一个?任何例子都是非常感谢的 已编辑 我们的服务器有很多客户端,包括移动(ios、android)、pc和web。websocket是否仅在web浏览器中可用?websocket在您列出的所有客户端中都可用。 通常像Atmoshphere这样的
已编辑
我们的服务器有很多客户端,包括移动(ios、android)、pc和web。websocket是否仅在web浏览器中可用?websocket在您列出的所有客户端中都可用。 通常像Atmoshphere这样的框架处理降级到其他类型的传输(例如,longpolling而不是WebSocket)并为您抽象出差异。WebSocket是长轮询试图解决的问题的标准,即服务器端推送 我已经在jetty上为Dropwizard 0.7.0制作了WebSocket,但是我已经阅读了DW google组中链接到的线程 看 及 基本上,您将向DW添加一个websocket servlet,该servlet协商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 libs实例化的端点:
@WebSocket
public class MyWebSocketEndpoint {
@OnWebSocketMessage
public void onMessage(Session session, String s) throws IOException {
session.getRemote().sendString("Returned; "+s);
}
}
Websocket在您列出的所有客户端中都可用。 通常像Atmoshphere这样的框架处理降级到其他类型的传输(例如,longpolling而不是WebSocket)并为您抽象出差异。WebSocket是长轮询试图解决的问题的标准,即服务器端推送 我已经在jetty上为Dropwizard 0.7.0制作了WebSocket,但是我已经阅读了DW google组中链接到的线程 看 及 基本上,您将向DW添加一个websocket servlet,该servlet协商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 libs实例化的端点:
@WebSocket
public class MyWebSocketEndpoint {
@OnWebSocketMessage
public void onMessage(Session session, String s) throws IOException {
session.getRemote().sendString("Returned; "+s);
}
}
如果要遵循JSR-356 websockets标准,可以使用以下两个Dropwizard捆绑包之一:
<dependency>
<groupId>com.liveperson</groupId>
<artifactId>dropwizard-websocket</artifactId>
<version>XXX</version>
</dependency>
com.liveperson
dropwizard websocket
XXX
然后:
public void初始化(引导引导引导){
addBundle(新的WebsocketBundle(AnnotatedEchoServer.class));
}
@计量
@定时
@例外情况
@ServerEndpoint(“/annotated ws”)
公共静态类注释dechoserver{
@奥诺彭
public void myOnOpen(最后一次会话)引发IOException{
session.getAsyncRemote().sendText(“欢迎”);
}
@OnMessage
public void myOnMsg(最终会话,字符串消息){
session.getAsyncRemote().sendText(message.toUpperCase());
}
@一次
公共空间myocclose(最后一节,CloseReason cr){
}
}
如果要遵循JSR-356 websockets标准,可以使用以下两个Dropwizard捆绑包之一:
<dependency>
<groupId>com.liveperson</groupId>
<artifactId>dropwizard-websocket</artifactId>
<version>XXX</version>
</dependency>
com.liveperson
dropwizard websocket
XXX
然后:
public void初始化(引导引导引导){
addBundle(新的WebsocketBundle(AnnotatedEchoServer.class));
}
@计量
@定时
@例外情况
@ServerEndpoint(“/annotated ws”)
公共静态类注释dechoserver{
@奥诺彭
public void myOnOpen(最后一次会话)引发IOException{
session.getAsyncRemote().sendText(“欢迎”);
}
@OnMessage
public void myOnMsg(最终会话,字符串消息){
session.getAsyncRemote().sendText(message.toUpperCase());
}
@一次
公共空间myocclose(最后一节,CloseReason cr){
}
}
正如我在上面的链接中所评论的,这会导致两个单独的jersey环境,因为Atmo servlet会扫描DW中使用的jersey的设置。()正如我在上面的链接中所评论的,这会导致两个独立的jersey环境,因为ATMOservlet会扫描DW中使用的jersey的设置。()