2016-06-15 4 views
1

Я работаю над проектом, в котором я должен создать веб-приложение. Этот webapp работает с Jetty на сервере, который принадлежит нашему университету.JavaScript WebSocket: Cant connect to localhost

У меня есть резервная копия с этого сервера, которая работает на сервере. Но я хотел работать над этим в затмении с плагином причала maven. И теперь проект не работает в моей среде IDE.

Единственное сообщение, которое я получаю:

Firefox kann keine Verbindung zu dem Server unter ws://localhost:8080/toUpper/ aufbauen. game.js:837:13

Что переводится: Firefox не может установить соединение с сервером WS: // локальный: 8080/TOUPPER/

Определенная линия (строка 837): webSocket = new WebSocket("ws://localhost:8080/toUpper/");

Существует два класса, которые относятся к этому вызову.

@WebServlet(urlPatterns = "/toUpper") 
public class ToUpperWebSocketServlet extends WebSocketServlet { 
    /** 
    * 
    */ 
    private static final long serialVersionUID = 9106843498328099741L; 
    @Override 
    public void configure(WebSocketServletFactory factory) { 
     factory.register(ToUpperWebSocket.class); 
    } 
} 

и это один

@WebSocket 
public class ToUpperWebSocket { 
    public static ArrayList<String> allgames = new ArrayList<String>(); 
    public static ArrayList<Session> clientstogame = new ArrayList<Session>(); 
    public static ArrayList<Integer> allUniqueGames = new ArrayList<Integer>(); 
    public static ArrayList<Session> allUniqueGamesSessions = new ArrayList<Session>(); 
    public static volatile ArrayList<Long> allUniqueGamesDates = new ArrayList<Long>(); 
    public static int allUniqueGamesCounter = 0; 
    public static int counter; 
    public static boolean checkEnabled = false; 

    @OnWebSocketMessage 
    public void onText(Session session, String message) throws IOException { 
     System.out.println("Message received:" + message); 
     if (session.isOpen()) { 
      String response = message.toUpperCase(); 
      if (response.contains("GENERATE SPECTATOR ID")) { 
       if (!checkEnabled) { 
        checkEnabled = true; 
        Thread t1 = new Thread(new AvailableChecker()); 
        t1.start(); 
       } 
       allUniqueGamesCounter++; 
       allUniqueGames.add(allUniqueGamesCounter); 
       allUniqueGamesDates.add(System.currentTimeMillis()); 
       allUniqueGamesSessions.add(session); 
       session.getRemote().sendString("NEW SPECTATOR ID" + allUniqueGamesCounter); 
      } 

      if (response.contains("NEW SPECTATOR ")) { 
       response = response.replace("NEW SPECTATOR ", ""); 
       int responseInt = Integer.parseInt(response); 

       if (allUniqueGames.contains(responseInt)) { 
        for (int j = 0; j < allUniqueGames.size(); j++) { 
         String stringValue = allUniqueGames.get(j) + ""; 
         if (response.contains(stringValue)) { 
          allgames.add(response); 
          clientstogame.add(session); 
          session.getRemote().sendString("SPIEL GUCKEN MIT ID: " + response); 
         } 
        } 

       } else { 
        session.getRemote().sendString("SPIEL NICHT VORHANDEN MIT ID: " + response); 

       } 
      } 
      if (response.contains("POINTS") | response.contains("STATUS") | response.contains("GAME")) { 
       for (int i = 0; i < allUniqueGames.size(); i++) { 
        if (response.contains(allUniqueGames.get(i) + "")) { 
         allUniqueGamesDates.set(i, System.currentTimeMillis()); 
        } 
       } 

       for (int i = 0; i < allgames.size(); i++) { 
        if (response.contains(allgames.get(i))) { 
         try { 
          session.getRemote().sendString(response); 
          clientstogame.get(i).getRemote().sendString(response); 
          // clientstogame.get(i).getRemote().sendString("DEBUG 
          // ANZAHL SPECTATOR INSGESAMT: "+allgames.size()); 
         } catch (Exception e) { 
          allgames.remove(i); 
          clientstogame.remove(i); 
         } 
        } 
       } 
       session.getRemote().sendString("ES WILL JEMAND SPIEL ANBIETEN MIT ID: " + response); 
      } 
     } 
    } 

    @OnWebSocketConnect 
    public void onConnect(Session session) throws IOException {  
     System.out.println(session.getRemoteAddress().getHostString() + " connected!"); 
    } 

    @OnWebSocketClose 
    public void onClose(Session session, int status, String reason) { 

     System.out.println(session.getRemoteAddress().getHostString() + " closed!"); 
    } 

    public class AvailableChecker implements Runnable { 
     public void run() { 
      while (true) { 
       for (int i = 0; i < allUniqueGamesDates.size(); i++) { 
        long millisOfHost = allUniqueGamesDates.get(i); 
        long currentMillis = System.currentTimeMillis(); 
        if (currentMillis - millisOfHost > 10000) { 
         int idOfClosedGame = allUniqueGames.get(i); 
         for (int j = 0; j < allgames.size(); j++) { 
          if (allgames.contains(idOfClosedGame + "")) { 
           try { 
             clientstogame.get(j).getRemote().sendString("SPIEL WURDE GESCHLOSSEN"); 
            clientstogame.remove(j); 
            allgames.remove(j); 
           } catch (Exception e) { 

           } 
          } 
         } 
        } 
       } 
       try { 
        Thread.sleep(1000); 
       } catch (Exception e) { 
       } 
      } 
     } 
    } 
} 

Весь материал на стороне клиента работает. все файлы html, css и Javascript, но эта одна строка. Когда я запускаю проект с помощью maven, на консоли eclipse также нет сообщения об ошибке.

Эта ошибка возникает только при запуске проекта на локальном хосте. На сервере это работает. Чтобы заставить его работать на localhost, я просто изменил URI из ws: //theserver.com: port/toUpper в ws: // localhost: 8080/toUpper Но это явно не помогло.

Вот мой pom.xml, если это поможет:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>OurGroup</groupId> 
    <artifactId>TheTitle</artifactId> 
    <packaging>war</packaging> 
    <version>0.0.1-SNAPSHOT</version> 
    <name>the Maven Webapp</name> 
    <url>http://maven.apache.org</url> 

    <properties> 
     <jetty.version>9.3.9.v20160517</jetty.version> 
    </properties> 

    <dependencies> 
     <!--Jetty dependencies start here --> 
     <dependency> 
      <groupId>org.eclipse.jetty</groupId> 
      <artifactId>jetty-server</artifactId> 
      <version>${jetty.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.eclipse.jetty</groupId> 
      <artifactId>jetty-servlet</artifactId> 
      <version>${jetty.version}</version> 
     </dependency> 
     <!--Jetty dependencies end here --> 
     <!--Jetty Websocket server side dependencies start here --> 
     <!--Jetty JSR-356 Websocket server side dependency --> 
     <dependency> 
      <groupId>org.eclipse.jetty.websocket</groupId> 
      <artifactId>javax-websocket-server-impl</artifactId> 
      <version>${jetty.version}</version> 
     </dependency> 
     <!--Jetty Websocket API server side dependency --> 
     <dependency> 
      <groupId>org.eclipse.jetty.websocket</groupId> 
      <artifactId>websocket-server</artifactId> 
      <version>${jetty.version}</version> 
     </dependency> 
     <!--Jetty Websocket server dependencies end here --> 
     <!--Jetty Websocket client side dependencies start here --> 
     <!--JSR-356 Websocket client side depencency --> 
     <dependency> 
      <groupId>org.eclipse.jetty.websocket</groupId> 
      <artifactId>javax-websocket-client-impl</artifactId> 
      <version>${jetty.version}</version> 
     </dependency> 
     <!--Jetty Websocket API client side dependency --> 
     <dependency> 
      <groupId>org.eclipse.jetty.websocket</groupId> 
      <artifactId>websocket-client</artifactId> 
      <version>${jetty.version}</version> 
     </dependency> 
     <!--Jetty Websocket client side dependencies end here --> 
    </dependencies> 
    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-war-plugin</artifactId> 
       <version>2.3</version> 
       <configuration> 
        <failOnMissingWebXml>false</failOnMissingWebXml> 
       </configuration> 
      </plugin> 
      <plugin> 
       <groupId>org.eclipse.jetty</groupId> 
       <artifactId>jetty-maven-plugin</artifactId> 
       <version>${jetty.version}</version> 
       <configuration> 
        <scanIntervalSeconds>5</scanIntervalSeconds> 
       </configuration> 
      </plugin> 
     </plugins> 
     <finalName>theName</finalName> 
    </build> 
</project> 

Я надеюсь на некоторую помощь. С уважением, J.

EDIT: Проект по-прежнему находится на сервере. Файлы .class не были скомпилированы мной. Они были скомпилированы кем-то другим с командной строкой с использованием javac. Когда я использую URI ws: //serveraddress.com: 1234/toUpper для websocket, когда я запускаю свой проект на локальном хосте, он работает.

+0

Почему вы ставите зависимости от причала в 'WEB-INF/lib' вашей войны? –

+0

@JoakimErdfelt Откуда это получить? Большинство из кода существовало до того, как я получил его в пальцах. Извините, я действительно не понимаю, что вы хотите сказать. Это ошибка, чтобы сделать это так? – JWo

+0

Не заявляя, что это ошибка, она может быть действительной, зависит от того, как вы хотите запустить свою ВОЙНУ. '' деклараций для 'org.eclipse.jetty.* 'groupIds должно, вероятно, иметь' при условии '(это типичная настройка) –

ответ

0

Думаю, я получил это на этот раз самостоятельно.

Я прокомментировал аннотацию Webservlet с шаблоном url и написал сопоставления сервлетов в web.xml. Файл web.xml был пуст и не существовал до того, как я преобразовал проект в проект maven. Как-то это сработало раньше с этими аннотациями, но я не скомпилировал эту версию. В любом случае, он должен работать.

Хотя кто-то сказал мне, что аннотация сервлета с Url-Pattern в файлах .java должна работать. но в моем случае я не понимал, почему это не сработало. Поэтому я поеду с web.xml и разместим там сервлет-сопоставления.

Смежные вопросы