2013-03-26 2 views
27

그런 막연한 질문을하는 것이 싫지만 간단한 예제를 찾는 데 어려움을 겪고 있습니다. 내가 찾을 수임베디드 WebSocket 서버 Jetty 9는 어떻게 만듭니 까?

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(); 
     } 
    } 
} 

내장 부두 예제 항상 실행하는 서버 인스턴스를 시작하려면 다음과 같이 보여,하지만 난 내 WebSocketServlet를 인스턴스화하는 방법을 모른다 : 여기에 지금까지 무슨이다.

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

WebSocket 연결 요청을 처리 할 수있는 임베디드 서버는 어떻게 만듭니 까?

답변

33

업데이트 : 년 12 월 (2), 최대 내장 부두의 최신 예를 들어 2013

웹 소켓과 볼 :

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

원래 대답

이 예있다 테스트 케이스에서 발견되었습니다.

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

짧은 답변 :

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(); 

이 1 컨텍스트 루트 컨텍스트를 처리하는 간단한 서버를 생성합니다.

http://localhost:8080/ 

WebSocketHandler를 다른 컨텍스트에 바인딩하려면 ContextHandler로 랩핑하십시오. 이 코드를 사용할 필요가 없습니다 (이) 컨테이너의 책임입니다

1)이 경우 :

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(); 

여기
http://localhost:8080/echo/ 
+1

감사합니다. –

+3

JSR-356의 예제가 포함 된 업데이트에 대해 – betomontejo

+0

junit을 사용하여 테스트를 작성하려고합니다. websocket 서블릿으로 임베디드 부두 서버를 시작하는 것이 효과가있는 것 같습니다. 그러나'''container.connectToServer (...)''로 연결하려고하면 java.util.concurrent.RejectedExecutionException : org가 throw됩니다[email protected] –

6

에 웹 소켓을 바인딩은 서블릿 접근 방법이다 :

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

2) 서블릿을위한 web.xml 서술자를 만듭니다

이제3210
<!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> 

, 당신은 JS 쓰기 :

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

메시지가 여기에

더 이해 서블릿에 대한 자습서 당신의 MyEchoSocket의 타세 방법으로 처리를 tutorial

행운을 빕니다.

관련 문제