项目需求
服务器端项目是用mina写的传统socket,准备升级到支持websocket接入。
为什么采用undertow
1、Undertow 是基于 NIO 的高性能 Web 嵌入式服务器,并且支持websocket(这个很重要,只要把undertow集成到项目中,用undertow启用websokcet,然后把原来的socket切换到websocket。)
2、轻量级web服务器:多么轻量级呢,启动一个支持websocket的服务只需要20M内存,如下图:
上图的代码如下:
public class WebSocketServer {
public static void main(final String[] args) {
Undertow server = Undertow.builder()
.addHttpListener(8080, "localhost")
.setHandler(path()
.addPrefixPath("/myapp", websocket(new WebSocketConnectionCallback() {
@Override
public void onConnect(WebSocketHttpExchange exchange, WebSocketChannel channel) {
channel.getReceiveSetter().set(new AbstractReceiveListener() {
@Override
protected void onFullTextMessage(WebSocketChannel channel, BufferedTextMessage message) {
WebSockets.sendText(message.getData(), channel, null);
}
});
channel.resumeReceives();
}
}))
.addPrefixPath("/", resource(new ClassPathResourceManager(WebSocketServer.class.getClassLoader(), WebSocketServer.class.getPackage())).addWelcomeFiles("index.html")))
.build();
server.start();
}
}
3、开源,遵循Apache 2.0。商业软件可使用,并且不要求商业软件开源。
4、支 持permessage-deflate压缩,这个是对通信内容进行压缩的扩展,可以有效的降低服务器和客户端通信使用的带宽。如下图
在request请求头里边客户端表明了自己支持permessage-deflate、然后服务器在response头里边告诉了服务器采用permessage-deflatey压缩。