2014-07-09 3 views
1

조금, 내가 서버에 정적 HTML 파일 index.html을 시도하고 내 annoted 웹 소켓 ServerEndpoint의 POJO를 추가하고 그래서 난 한 다음 그것으로 재생 undertwo을 설정하려고간단한 웹 소켓과 정적 파일 예를

final Xnio xnio = Xnio.getInstance("nio", Undertow.class.getClassLoader()); 
    final XnioWorker xnioWorker = xnio.createWorker(OptionMap.builder().getMap()); 

    WebSocketDeploymentInfo webSockets = new WebSocketDeploymentInfo() 
      .addEndpoint(Socket.class) 
      .setWorker(xnioWorker); 

    final DeploymentManager deployment = defaultContainer() 
      .addDeployment(deployment() 
        .setClassLoader(main.class.getClassLoader()) 
        .setContextPath("/websockets") 
        .setDeploymentName("websockets") 
        .addServletContextAttribute(WebSocketDeploymentInfo.ATTRIBUTE_NAME, webSockets)); 

    deployment.deploy(); 
    deployment.start(); 


    Undertow.builder() 
      .addHttpListener(8000,"localhost") 
      .setHandler(path().addPrefixPath("/", resource(new ClassPathResourceManager(main.class.getClassLoader(), main.class.getPackage())).addWelcomeFiles("WSGSS/index.html"))) 
      .build() 
      .start(); 

index.html은 예상대로 제공되지만 websocket에 연결할 수없는 것 같습니다. github의 예제와 같이 websocket을 배포하는 방식에 문제가있는 것은 확실하지만 정적 파일을 제공하는 올바른 방법을 찾지 못했습니다.

자바 스크립트에서 예외가 발생합니다.

var ws = new WebSocket("ws://localhost:8000/websockets/socket") 

WebSocket connection to 'ws://localhost:8000/websockets/socket' failed: Error during WebSocket handshake: Unexpected response code: 404 

도 여기

@ServerEndpoint(value = "/socket", 
encoders = CommandEncoder.class, 
decoders = CommandDecoder.class) 
public class Socket{ 

    private static final Set<Session> sessions = Collections.synchronizedSet(new HashSet<Session>()); 
    private final Logger log = Logger.getLogger(getClass().getName()); 

    @OnMessage 
    public void onMessage(Session session,Command command){ 
     log.info("command of type "+ command.getAction() + " recieved"); 
     command.Process(); 
     try{ 
      session.getBasicRemote().sendObject(command); 
      //Future<Void> future = session.getAsyncRemote().sendText(message); 
     } catch (IOException | EncodeException ex){ 
      log.info(ex.getMessage() + ex.getCause()); 
     } 
    } 

    @OnOpen 
    public void onOpen(Session session){ 
     sessions.add(session); 
     log.info("new session created "+ session.getId()); 
    } 

    @OnClose 
    public void onClose(Session session){ 
     sessions.remove(session); 
    } 

    @OnError void onError(Session session,Throwable thr){ 
     log.info(session.getId() + " error " + thr.getMessage() + thr.getCause()); 
    } 
} 

답변

1

다음은 그것을

Undertow.builder() 
      .addHttpListener(8000,"localhost") 
      .setHandler(path() 
        .addPrefixPath("/", resource(new ClassPathResourceManager(main.class.getClassLoader(), main.class.getPackage())).addWelcomeFiles("WSGSS/index.html")) 
        .addPrefixPath("/websocket",manager.deployment())) 
      .build() 
      .start(); 
를 해결 내 ServerEndpoint입니다