同样的,基于getty的架构模式,websocket同样以插件的形式支持,使用起来非常简单,与原有插件使用模式保持一致

    启动一个ws服务

    1. try {
    2. //初始化配置对象
    3. AioServerConfig aioServerConfig = new AioServerConfig();
    4. //设置host,不设置默认localhost
    5. //aioServerConfig.setHost("127.0.0.1");
    6. //设置端口号
    7. aioServerConfig.setPort(8888);
    8. //设置服务器端内存池最大可分配空间大小,默认256mb,内存池空间可以根据吞吐量设置。
    9. // 尽量可以设置大一点,因为这不会真正的占用系统内存,只有真正使用时才会分配
    10. aioServerConfig.setServerChunkSize(512 * 1024 * 1024);
    11. //设置数据输出器队列大小,一般不用设置这个参数,默认是10*1024*1024
    12. aioServerConfig.setBufferWriterQueueSize(10 * 1024 * 1024);
    13. //设置读取缓存块大小,一般不用设置这个参数,默认128字节
    14. aioServerConfig.setReadBufferSize(2048);
    15. //设置内存池等待分配内存的最大阻塞时间,默认是1秒
    16. aioServerConfig.setChunkPoolBlockTime(1000);
    17. //设置SocketOptions
    18. aioServerConfig.setOption(StandardSocketOptions.SO_RCVBUF, 8192);
    19. AioServerStarter server = new AioServerStarter(aioServerConfig);
    20. server.socketChannel(SocketChannel.TCP).channelInitializer(new ChannelInitializer() {
    21. @Override
    22. public void initChannel(AioChannel channel) throws Exception {
    23. //获取责任链对象
    24. DefaultChannelPipeline defaultChannelPipeline = channel.getDefaultChannelPipeline();
    25. //先把ws的编解码器添加到责任链前面。注意,只有先通过ws的编解码器,才能解析ws的消息帧,
    26. //后续的解码器才能继续解析期望得到的结果
    27. defaultChannelPipeline.addLast(new WebSocketEncoder());
    28. defaultChannelPipeline.addLast(new WebSocketDecoder());
    29. defaultChannelPipeline.addLast(new StringDecoder());
    30. //添加自定义的简单消息处理器
    31. defaultChannelPipeline.addLast(new SimpleHandler());
    32. }
    33. }).start();
    34. System.out.println("启动ws服务");
    35. } catch (Exception e) {
    36. }

    开启带ssl的wss服务

    1. try {
    2. //初始化配置对象
    3. AioServerConfig aioServerConfig = new AioServerConfig();
    4. //设置host,不设置默认localhost
    5. //aioServerConfig.setHost("127.0.0.1");
    6. //设置端口号
    7. aioServerConfig.setPort(8888);
    8. //设置服务器端内存池最大可分配空间大小,默认256mb,内存池空间可以根据吞吐量设置。
    9. // 尽量可以设置大一点,因为这不会真正的占用系统内存,只有真正使用时才会分配
    10. aioServerConfig.setServerChunkSize(512 * 1024 * 1024);
    11. //设置数据输出器队列大小,一般不用设置这个参数,默认是10*1024*1024
    12. aioServerConfig.setBufferWriterQueueSize(10 * 1024 * 1024);
    13. //设置读取缓存块大小,一般不用设置这个参数,默认128字节
    14. aioServerConfig.setReadBufferSize(2048);
    15. //设置内存池等待分配内存的最大阻塞时间,默认是1秒
    16. aioServerConfig.setChunkPoolBlockTime(1000);
    17. //设置SocketOptions
    18. aioServerConfig.setOption(StandardSocketOptions.SO_RCVBUF, 8192);
    19. AioServerStarter server = new AioServerStarter(aioServerConfig);
    20. server.socketChannel(SocketChannel.TCP).channelInitializer(new ChannelInitializer() {
    21. @Override
    22. public void initChannel(AioChannel channel) throws Exception {
    23. //获取责任链对象
    24. DefaultChannelPipeline defaultChannelPipeline = channel.getDefaultChannelPipeline();
    25. //获取证书
    26. String pkPath = ResourceUtils.getURL("classpath:serverStore.jks")
    27. .getPath();
    28. //ssl配置
    29. SslConfig sSLConfig = new SslConfig();
    30. sSLConfig.setKeyFile(pkPath);
    31. sSLConfig.setKeyPassword("123456");
    32. sSLConfig.setKeystorePassword("123456");
    33. sSLConfig.setTrustFile(pkPath);
    34. sSLConfig.setTrustPassword("123456");
    35. //设置服务器模式
    36. sSLConfig.setClientMode(false);
    37. //设置单向验证或双向验证
    38. sSLConfig.setClientAuth(ClientAuth.NONE);
    39. //初始化ssl服务
    40. SslService sslService = new SslService(sSLConfig, "TLSv1.2");
    41. //注意,只要使用ssl。都需要把ssl编解码器放到责任链最前面
    42. defaultChannelPipeline.addFirst(new SslHandler(channel, sslService));
    43. //紧跟着把ws的编解码器添加到责任链前面。注意,只有先通过ws的编解码器,才能解析ws的消息帧,
    44. //后续的解码器才能继续解析期望得到的结果
    45. defaultChannelPipeline.addLast(new WebSocketEncoder());
    46. defaultChannelPipeline.addLast(new WebSocketDecoder());
    47. defaultChannelPipeline.addLast(new StringDecoder());
    48. //添加自定义的简单消息处理器
    49. defaultChannelPipeline.addLast(new SimpleHandler());
    50. }
    51. }).start();
    52. System.out.println("启动ws服务");
    53. } catch (Exception e) {
    54. }