Java 简单websocket和静态文件示例

Java 简单websocket和静态文件示例,java,jakarta-ee,wildfly-8,undertow,Java,Jakarta Ee,Wildfly 8,Undertow,尝试在undertwo中进行设置以稍微使用它,我尝试为一个静态html文件index.html提供服务器,并添加我的注释websocket ServerEndpoint pojo,因此我执行了以下操作 final Xnio xnio = Xnio.getInstance("nio", Undertow.class.getClassLoader()); final XnioWorker xnioWorker = xnio.createWorker(OptionMap.builder().g

尝试在undertwo中进行设置以稍微使用它,我尝试为一个静态html文件index.html提供服务器,并添加我的注释websocket ServerEndpoint pojo,因此我执行了以下操作

final Xnio xnio = Xnio.getInstance("nio", Undertow.class.getClassLoader());
    final XnioWorker xnioWorker = xnio.createWorker(OptionMap.builder().getMap());

    WebSocketDeploymentInfo webSockets  = new WebSocketDeploymentInfo ()
           .addEndpoint(Socket.class)
           .setWorker(xnioWorker);

    final DeploymentManager deployment = defaultContainer()
            .addDeployment(deployment()
                    .setClassLoader(main.class.getClassLoader())
                    .setContextPath("/websockets")
                    .setDeploymentName("websockets")
                    .addServletContextAttribute(WebSocketDeploymentInfo.ATTRIBUTE_NAME, webSockets));

    deployment.deploy();
    deployment.start();


    Undertow.builder()
            .addHttpListener(8000,"localhost")
            .setHandler(path().addPrefixPath("/", resource(new ClassPathResourceManager(main.class.getClassLoader(), main.class.getPackage())).addWelcomeFiles("WSGSS/index.html")))
            .build()
            .start();
index.html得到了预期的服务,但我似乎无法连接到websocket,而且我确信我部署websocket的方式有问题,如果我像github上的示例那样做,它会工作,但我找不到正确的方式来服务静态文件

在javascript中,我得到了一个异常

var ws = new WebSocket("ws://localhost:8000/websockets/socket")

WebSocket connection to 'ws://localhost:8000/websockets/socket' failed: Error during WebSocket handshake: Unexpected response code: 404 
这里还有我的服务器端点

@ServerEndpoint(value = "/socket",
encoders = CommandEncoder.class,
decoders = CommandDecoder.class)
public class Socket{

    private static final Set<Session> sessions = Collections.synchronizedSet(new HashSet<Session>());
    private final Logger log = Logger.getLogger(getClass().getName());

    @OnMessage
    public void onMessage(Session session,Command command){
        log.info("command of type "+ command.getAction() + " recieved");
        command.Process();
        try{
            session.getBasicRemote().sendObject(command);
            //Future<Void> future = session.getAsyncRemote().sendText(message);
        } catch (IOException | EncodeException ex){
            log.info(ex.getMessage() + ex.getCause());
        }
    }

    @OnOpen
    public void  onOpen(Session session){
        sessions.add(session);
        log.info("new session created "+ session.getId());
    }

    @OnClose
    public void onClose(Session session){
        sessions.remove(session);
    }

    @OnError void onError(Session session,Throwable thr){
        log.info(session.getId() + " error " + thr.getMessage() + thr.getCause());
    }
}
@ServerEndpoint(value=“/socket”,
编码器=CommandEncoder.class,
解码器=CommandDecoder.class)
公共类套接字{
私有静态最终集会话=Collections.synchronizedSet(newhashset());
私有最终记录器log=Logger.getLogger(getClass().getName());
@OnMessage
公共void onMessage(会话、命令){
log.info(“类型为“+command.getAction()+”received“)的命令);
command.Process();
试一试{
session.getBasicRemote().sendObject(命令);
//Future=session.getAsyncRemote().sendText(消息);
}catch(IOException | EncodeException ex){
log.info(例如getMessage()+例如getCause());
}
}
@奥诺彭
公共开放(会议){
添加(会话);
log.info(“创建的新会话”+会话.getId());
}
@一次
公共void onClose(会话){
会话。删除(会话);
}
@OnError void OnError(会话会话,可丢弃的thr){
log.info(session.getId()+“error”+thr.getMessage()+thr.getCause());
}
}

以下内容解决了这个问题

Undertow.builder()
            .addHttpListener(8000,"localhost")
            .setHandler(path()
                    .addPrefixPath("/", resource(new ClassPathResourceManager(main.class.getClassLoader(), main.class.getPackage())).addWelcomeFiles("WSGSS/index.html"))
                    .addPrefixPath("/websocket",manager.deployment()))
            .build()
            .start();