Websocket 示例不起作用

2022-09-04 02:24:29

我尝试运行此示例:

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

我使用,我检查链接:。我是否需要注册此 websocket 或在 中添加一些内容?任何想法为什么不为我工作?Tomcat 7.0.47ws://localhost/Tests/chatweb.xml


答案 1

我在尝试在Tomcat 7.0.47上使用WebSocket API时遇到了同样的问题。客户端显示的错误消息根本没有任何帮助,并且我的服务器端终结点从未创建过。

在浪费了很多时间之后,我发现这是由于我设置依赖关系的方式。我正在使用具有默认范围的Maven,因为它会导致问题,因为Tomcat在其lib文件夹中有。设置依赖关系以解决它。javax.websocket-apicompilewebsocket-api.jarprovided

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

希望这有帮助

同样值得注意的是,如果在Apache后面运行,您将需要,如果使用IIS,您将需要8.0版本,因为之前的任何内容都不支持websockets。mod_proxy_wstunnel


答案 2

推荐