2013-03-26 27 views
27

Böyle belirsiz bir soru sormaktan nefret ediyorum, ama basit bir örnek bulmakta zorlanıyorum. BulabileceğimGömülü bir WebSocket sunucusu Jetty 9'u nasıl oluştururum?

public class JettyWebSocketServlet extends WebSocketServlet{ 
    @Override 
    public void configure(WebSocketServletFactory factory) { 
     factory.register(MyEchoSocket.class); 
    } 
} 

@WebSocket 
public class MyEchoSocket { 
    @OnWebSocketMessage 
    public void onText(WebSocketConnection conn, String message) { 
     System.out.println("text: " + message); 
     try { 
      conn.write(null, new FutureCallback(), "got: " + message); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 

gömülü İskele örnekleri hep çalıştıran bir sunucu örneğini başlatmak için, aşağıdaki gibi bir şey göstermek, ama benim WebSocketServlet örneğini nasıl bilmiyorum: İşte ben bugüne kadar bu.

 Server server = new Server(8080); 
     server.start(); 
     server.join(); 

WebSocket bağlantı isteklerini işleyebilecek bir yerleşik sunucu nasıl oluştururum?

cevap

33

Güncelleme: 2 Aralık, bir yukarı Gömülü İskelesi'ne tarihi örneğine için 2013

WebSocket ile bakın:

https://github.com/jetty-project/embedded-jetty-websocket-examples

Orijinal Cevap

bir örnek var test vakalarında bulundu.

http://git.eclipse.org/c/jetty/org.eclipse.jetty.project.git/tree/jetty-websocket/websocket-server/src/test/java/org/eclipse/jetty/websocket/server/examples/echo/ExampleEchoServer.java

Kısa Cevap:

Server server = new Server(8080); 
WebSocketHandler wsHandler = new WebSocketHandler() 
    { 
     @Override 
     public void configure(WebSocketServletFactory factory) 
     { 
      factory.register(MyEchoSocket.class); 
     } 
    }; 
server.addHandler(wsHandler); 
server.start(); 
server.join(); 

Bu 1 bağlamı, kök bağlamını kolları basit sunucu yaratacaktır.

http://localhost:8080/ 

Başka bir bağlamla WebSocketHandler bağlamak bir ContextHandler onu sarmak istiyorum. Bu kodu kullanmak gerekmez (o) konteyner sorumluluğundadır

1) Bu durumda:

Server server = new Server(8080); 
WebSocketHandler wsHandler = new WebSocketHandler() 
    { 
     @Override 
     public void configure(WebSocketServletFactory factory) 
     { 
      factory.register(MyEchoSocket.class); 
     } 
    }; 
ContextHandler context = new ContextHandler(); 
context.setContextPath("/echo"); 
context.setHandler(wsHandler); 
server.addHandler(context); 
server.start(); 
server.join(); 

Bu

İşte
http://localhost:8080/echo/ 
+1

Teşekkürler, bu hile yaptı! JSR-356 –

+3

+1 Ben junit ile bir test yazmaya çalışıyorum. Websocket servlet ile gömülü bir jetty sunucusunun başlatılması işe yarıyor gibi görünüyor. Ancak '' 'container.connectToServer (...)' '' ile bağlanmaya çalışılırken java.util.concurrent.RejectedExecutionException: [email protected] – betomontejo

+0

ile bir örnek içeren güncelleştirme için –

6

için WebSocket'e bağlayacak servlet yaklaşımdır:

Server server = new Server(8080); 
       server.start(); 
       server.join(); 

2) servlet için web.xml tanımlayıcısı oluşturun:

Şimdi
<!DOCTYPE web-app PUBLIC 
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" 
"http://java.sun.com/dtd/web-app_2_3.dtd" > 

<web-app> 
    <display-name>WebSocket application</display-name> 
    <servlet> 
     <servlet-name>servlet</servlet-name> 
     <servlet-class>com.example.websocket.JettyWebSocketServlet</servlet-class> 
    </servlet> 

    <servlet-mapping> 
     <servlet-name>servlet</servlet-name> 
     <url-pattern>/hello</url-pattern> 
    </servlet-mapping> 
</web-app> 

, sen JS yazın:

var ws = new WebSocket("ws://localhost:8080/hello"); 
ws.send("text"); 

mesajı Burada

daha anlayışlı servlet için öğretici olduğunu da MyEchoSocket ait ontext yöntemi ile ele alınır, tutorial

iyi şanslar.

İlgili konular