【发布时间】:2013-08-06 20:29:50
【问题描述】:
据此:http://undertow.io/ 它支持 websockets。但是,没有关于如何执行此操作的文档。我只想要一个简单的嵌入式 undertow 处理 Web 套接字示例。
我不想抢整个 jboss 应用服务器。
【问题讨论】:
标签: java jboss websocket wildfly undertow
据此:http://undertow.io/ 它支持 websockets。但是,没有关于如何执行此操作的文档。我只想要一个简单的嵌入式 undertow 处理 Web 套接字示例。
我不想抢整个 jboss 应用服务器。
【问题讨论】:
标签: java jboss websocket wildfly undertow
我想出了这门课。但是,我不是 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();
}
}
【讨论】: