[英]Implementing long polling server using Dropwizard 0.7.0
我正在嘗試使用Dropwizard 0.7.0框架實現長輪詢服務器。 建議我使用碼頭集成。 經過一番谷歌搜索后,我對websockets,碼頭續航,彗星之類的東西感到非常困惑。
我的問題是,這些東西是什么,我應該選擇哪一個? 任何例子都非常感謝!
已編輯
我們的服務器有許多客戶端,包括移動設備(iOS,Android),PC和Web。 websocket僅在Web瀏覽器中可用嗎?
Websocket在您列出的所有客戶端中都可用。 通常,諸如Atmoshphere之類的框架會處理降級為其他類型的傳輸(例如,使用長輪詢而不是websocket)並為您抽象化差異。 Websockets是長輪詢嘗試解決的問題的標准-即服務器端推送。
我已經完成了Dropwizard 0.7.0的碼頭上的websockets-但在DW google組中我鏈接到的線程上有閱讀。
請參閱http://www.eclipse.org/jetty/documentation/9.0.6.v20130930/websockets.html和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);
}
}
最后是您的端點,這是通過碼頭websocket庫實現的:
@WebSocket
public class MyWebSocketEndpoint {
@OnWebSocketMessage
public void onMessage(Session session, String s) throws IOException {
session.getRemote().sendString("Returned; "+s);
}
}
如果要遵循JSR-356網絡套接字標准,則可以使用以下兩個Dropwizard捆綁軟件之一:
我寫第二篇文章是為了也支持websockets指標(計數消息,打開的會話,會話持續時間統計信息等)。
例:
<dependency>
<groupId>com.liveperson</groupId>
<artifactId>dropwizard-websocket</artifactId>
<version>XXX</version>
</dependency>
然后:
public void initialize(Bootstrap<Configuration> bootstrap) {
bootstrap.addBundle(new WebsocketBundle(AnnotatedEchoServer.class));
}
@Metered
@Timed
@ExceptionMetered
@ServerEndpoint("/annotated-ws")
public static class AnnotatedEchoServer {
@OnOpen
public void myOnOpen(final Session session) throws IOException {
session.getAsyncRemote().sendText("welcome");
}
@OnMessage
public void myOnMsg(final Session session, String message) {
session.getAsyncRemote().sendText(message.toUpperCase());
}
@OnClose
public void myOnClose(final Session session, CloseReason cr) {
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.