【问题标题】:How to do websockets in embedded undertow?如何在嵌入式undertow中做websockets?
【发布时间】:2013-08-06 20:29:50
【问题描述】:

据此:http://undertow.io/ 它支持 websockets。但是,没有关于如何执行此操作的文档。我只想要一个简单的嵌入式 undertow 处理 Web 套接字示例。

我不想抢整个 jboss 应用服务器。

【问题讨论】:

    标签: java jboss websocket wildfly undertow


    【解决方案1】:
    【解决方案2】:

    我想出了这门课。但是,我不是 JBoss 专家。我对 xnio 的东西特别不确定。

    import io.undertow.Undertow;
    import io.undertow.servlet.api.DeploymentManager;
    import io.undertow.websockets.jsr.WebSocketDeploymentInfo;
    import org.jboss.logging.Logger;
    import org.xnio.OptionMap;
    import org.xnio.Xnio;
    import org.xnio.XnioWorker;
    
    import javax.servlet.ServletException;
    import javax.websocket.OnClose;
    import javax.websocket.OnMessage;
    import javax.websocket.OnOpen;
    import javax.websocket.server.ServerEndpoint;
    import java.io.IOException;
    
    import static io.undertow.servlet.Servlets.defaultContainer;
    import static io.undertow.servlet.Servlets.deployment;
    import static io.undertow.websockets.jsr.WebSocketDeploymentInfo.ATTRIBUTE_NAME;
    
    public class WebsocketServer {
    
      private static final Logger LOGGER = Logger.getLogger(WebsocketServer.class);
    
      @ServerEndpoint("/")
      public static class SocketProxy {
    
        @OnOpen
        public void onOpen() {
          LOGGER.info("onOpen");
        }
    
        @OnClose
        public void onClose() {
          LOGGER.info("onClose");
        }
    
        @OnMessage
        public void onMessage(String message) {
          LOGGER.info("onMessage:" + message);
        }
    
      }
    
      public static void main(String[] args) throws ServletException, IOException {
        final Xnio xnio = Xnio.getInstance("nio", Undertow.class.getClassLoader());
        final XnioWorker xnioWorker = xnio.createWorker(OptionMap.builder().getMap());
        final WebSocketDeploymentInfo webSockets = new WebSocketDeploymentInfo()
            .addEndpoint(SocketProxy.class)
            .setWorker(xnioWorker);
        final DeploymentManager deployment = defaultContainer()
            .addDeployment(deployment()
                .setClassLoader(WebsocketServer.class.getClassLoader())
                .setContextPath("/")
                .setDeploymentName("embedded-websockets")
                .addServletContextAttribute(ATTRIBUTE_NAME, webSockets));
    
        deployment.deploy();
        Undertow.builder().
            addListener(8080, "localhost")
            .setHandler(deployment.start())
            .build()
            .start();
      }
    
    }
    

    【讨论】:

      猜你喜欢
      • 2018-03-17
      • 2014-04-14
      • 2019-12-20
      • 2016-01-30
      • 2016-10-24
      • 2021-11-29
      • 1970-01-01
      • 2014-04-01
      • 2017-01-15
      相关资源
      最近更新 更多