Подтвердить что ты не робот

Пример Websocket не будет работать

Я попробую запустить этот пример:

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

Я использую Tomcat 7.0.47, я проверяю ссылку: ws://localhost/Tests/chat. Нужно ли мне регистрировать этот веб-сайт или добавлять некоторые вещи в web.xml? Любая идея почему не работает для меня?

4b9b3361

Ответ 1

У меня была такая же проблема с попыткой использования WebSocket API на Tomcat 7.0.47. Сообщение об ошибке, отображаемое на стороне клиента, не было никакой помощью, и моя конечная точка на стороне сервера никогда не создавалась.

После многого потерянного времени я обнаружил, что это связано с тем, что я установил зависимость для javax.websocket-api. Я использую Maven, который имеет область по умолчанию как compile, которая вызывает проблемы, поскольку Tomcat имеет websocket-api.jar в своей папке lib. Установка зависимости от provided решила его.

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

Надеюсь, что это поможет

Также стоит отметить, что если вы будете работать за Apache, вам понадобится mod_proxy_wstunnel, и если вы используете IIS, вам понадобится версия 8.0, поскольку что-либо ранее не поддерживает веб-сайты.