только для сервера Jetty Websockets - без http-сервера - удалите ошибку 404 - PullRequest
1 голос
/ 24 октября 2011

Я реализовал небольшой сервер веб-сокетов, используя Jetty, встроенный в более крупное Java-приложение. Сервер работает на 8081 порту, и все работает нормально (протестировано с небольшим клиентом, в Google Chrome). Однако, если я пытаюсь получить доступ к http://localhost:8081 (да с http), я получаю ошибку 404, питаемую от причала.

Есть ли способ в молнии определить, основан ли полученный формат на формате веб-сокетов, и если нет (в нашем случае http), просто закрыть соединение с сокетом и никогда не возвращать ошибку 404?

Спасибо

Ответы [ 2 ]

2 голосов
/ 28 октября 2011

Вы можете сделать это самостоятельно, но я не думаю, что есть что-то, упакованное с Jetty, чтобы сделать это.

Если вы используете WebSocketServlet, то вы должны переопределить метод service,быть чем-то вроде

protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
  if(!"WebSocket".equals(request.getHeader("Upgrade")))
  {
     org.eclipse.jetty.server.Request jettyRequest =  org.eclipse.jetty.server.Request.getRequest(request);
     jettyRequest.getEndPoint().close();
     jettyRequest.setHandled(true);
  }
  else
  {
     super.service(request, response);
  }
}

Если вы свернули свой собственный обработчик, тогда вы сможете понять, как адаптировать этот код к вашим потребностям.

0 голосов
/ 28 октября 2011

Тим предлагает то, что WebSocketServlet уже делает.https://github.com/eclipse/jetty.project/blob/master/jetty-websocket/src/main/java/org/eclipse/jetty/websocket/WebSocketServlet.java

Просто расширьте WebSocketServlet и затем используйте различные методы doGet, doPost, doPut для обработки HTTP-запросов.Оставьте метод service () в покое, чтобы сделать то, что ему нужно.

...