2013-11-20 21 views
13

Ich versuche dieses Beispiel auszuführen:Websocket Beispiel wird nicht funktionieren

import java.util.logging.Level; 
import java.util.logging.Logger; 
import javax.websocket.OnClose; 
import javax.websocket.OnError; 
import javax.websocket.OnMessage; 
import javax.websocket.OnOpen; 
import javax.websocket.Session; 
import javax.websocket.server.ServerEndpoint; 

@ServerEndpoint(value = "/chat") 
public class ChatServer { 

    private static final Logger LOGGER = 
      Logger.getLogger(ChatServer.class.getName()); 

    @OnOpen 
    public void onOpen(Session session) { 
     LOGGER.log(Level.INFO, "New connection with client: {0}", 
       session.getId()); 
    } 

    @OnMessage 
    public String onMessage(String message, Session session) { 
     LOGGER.log(Level.INFO, "New message from Client [{0}]: {1}", 
       new Object[] {session.getId(), message}); 
     return "Server received [" + message + "]"; 
    } 

    @OnClose 
    public void onClose(Session session) { 
     LOGGER.log(Level.INFO, "Close connection for client: {0}", 
       session.getId()); 
    } 

    @OnError 
    public void onError(Throwable exception, Session session) { 
     LOGGER.log(Level.INFO, "Error for client: {0}", session.getId()); 
    } 
} 

Ich benutze Tomcat 7.0.47, ich Verbindung überprüfen: ws://localhost/Tests/chat. Muss ich diesen Websocket registrieren oder einige Dinge in web.xml hinzufügen? Irgendeine Idee warum funktioniert nicht für mich?

+0

jeder Stapel Trace/produzierte Fehlermeldung in Server-Protokolldatei? Was produziert der Browser, wenn Sie versuchen, eine Verbindung herzustellen? (Angenommen, Sie verwenden Browser als Client ..) –

+0

Es gibt nichts im Serverprotokoll, es sieht aus wie Anfrage nicht den Server erreichen. Zum Testen verwende ich die Chrome App 'Advanced Rest Client'. – Nyger

+0

Können Sie etwas anderes versuchen? "Advanced Rest Client" unterstützt keine WebSocket-Verbindungen (ich sehe das nicht in ihrer Beschreibung). Etwas einfaches wie http://www.websocket.org/echo.html sollte funktionieren. Sie können auch JavaScript-Fehler Konsole öffnen, wo normalerweise angegeben ist, was falsch ist (404, 500, anderen Grund ..) –

Antwort

13

Ich hatte das gleiche Problem beim Versuch, WebSocket API auf Tomcat 7.0.47 zu verwenden. Die Fehlermeldung, die clientseitig angezeigt wurde, war überhaupt keine Hilfe und mein serverseitiger Endpunkt wurde nie erstellt.

Nach viel verschwendete Zeit fand ich, dass es wegen der Weise war, die ich die Abhängigkeit für javax.websocket-api gesetzt hatte. Ich verwende Maven, das den Standardbereich als compile hat, der Probleme verursacht, da Tomcat die websocket-api.jar in seinem lib-Ordner hat. Das Einstellen der Abhängigkeit auf provided löste es.

<dependency> 
     <groupId>javax.websocket</groupId> 
     <artifactId>javax.websocket-api</artifactId> 
     <version>1.0</version> 
     <scope>provided</scope> 
    </dependency> 

this helps

Es ist auch erwähnenswert, dass hinter Apache, wenn Laufen Sie mod_proxy_wstunnel benötigen und IIS, wenn verwendet, wird Ihnen die Version 8.0 als etwas vor muss nicht WebSockets unterstützen.

+1

' vorausgesetzt,' da ging 2 Stunden ... – Jackson

+0

Wirklich danke bro .. Ich verbrachte mehr als 4 Stunden, um dieses Ding zu finden – GPrathap

+0

Ich hatte das umgekehrte Problem hier: Ich legte die Abhängigkeit in den frühen, aber den Rest von Die Koordinaten waren falsch. Fun fact, ' javax javaee-api' auch kompiliert, funktioniert aber nicht. 5 Stunden verloren ... – Pascal

Verwandte Themen